Re[3]: Вывод в консоль русского языка
От: Илюха Россия  
Дата: 27.11.03 15:40
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>CharToOem

PD>OemToChar

Хорошо это я уловил. Спасибо всем кто насоветовал. Теперь, чтобы не вставлять везде эту конвертацию я решил написать свой 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 не вызывается. Я подозреваю, что просто не установился мой фасет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.