Как использовать std :: num_put с пользовательским итератором? - PullRequest
0 голосов
/ 10 мая 2018

Как использовать std::num_put для записи числа в пользовательский итератор (например, std::back_insert_iterator<std::string>)?

std::string s;
using I = decltype(std::back_inserter(s));
auto& f = std::use_facet<std::num_put<char, I>>(std::locale());
f.put(std::back_inserter(s), /* what do I pass here? */, ' ', 5.6);

1 Ответ

0 голосов
/ 10 мая 2018

Вы, вероятно, не должны использовать std::num_put напрямую с std::back_insert_iterator<std::string>. Ваш код там не изменяет поведение locale, поэтому я не знаю, что вы пытаетесь сделать с фасетом.

Вместо этого рассмотрите возможность добавления std::stringstream к любым нужным фасетам, а затем выполните обычную вставку потока.

std::stringstream ss;
std::locale loc = // Some non-standard locale ?
ss.imbue(loc); // if you have changed anything
ss << 5.6;
std::string s = ss.str();
...