Не конструируется std::istream_iterator для wchar_t | C++
Хочу посимвольно перебрать файл и поменять некоторые символы. Для этого использую такой код:
std::wifstream m_in;
std::wofstream m_out;
//....
using in_it = std::istream_iterator<wchar_t>;
using out_it = std::ostream_iterator<wchar_t>;
std::transform(in_it(m_in), in_it(), out_it(m_out),
[](wchar_t c) {
return (c == 31 ? ';' : c);
});
И компилятор ругается, что я не могу создать итератор для std::wifstream. Хотя у std::wifstream char_type - это wchar_t, и для итератора я указал wchar_t. Что не так я делаю?
Ответы (1 шт):
Автор решения: AR Hovsepyan
→ Ссылка
template <class T, class Сh = char,
class Traits = char_traits<Ch>,
class Diff = ptrdiff_t>
class istream_iterator{...};
Обратите внимание, что его char_type то есть Ch по умолчанию есть char, поэтому этот параметр шаблона нужно передать:
using in_it = std::istream_iterator<wchar_t, wchar_t>;
using out_it = std::ostream_iterator<wchar_t, wchar_t>;