Привет, всем!
Я решил написать свой codecvt<...>, который перед выводом будет делать конвертацию из одной кодировки в другую.
Так вот фиг вам. У меня ни как не получается его прикруть к потоку.
Сделал так.
class MyCodeCVT : public std::codecvt<char, char, mbstate_t>{
typedef std::codecvt<char, char, mbstate_t> base_t;
public:
explicit MyCodeCVT(size_t r = 0): base_t(r){}
protected:
virtual result do_out(mbstate_t& __state,
const char* from,
const char* from_end,
const char*& from_next,
char* to,
char* to_limit,
char*& to_next) const
{
ptrdiff_t len = (std::min) (from_end - from, to_limit - to);
CharToOemBuff(from, to, len);
from_next = from + len;
to_next = to + len;
return ok;
}
};
std::string test("Строчка по-нашему");
int _tmain(int argc, _TCHAR* argv[])
{
std::locale loc(std::locale(), new MyCodeCVT);
std::cout.imbue(loc);
std::cout<<test<<std::endl;
return 0;
}
Метод do_out не вызывается. Посоветуйте, что исправить
--
Илья