Re: создание своего потоковго вывода
От: MaximE Великобритания  
Дата: 09.02.05 13:16
Оценка:
CyberZX wrote:

> У меня тут возникла задача сделать вывод в лог на основе стандартного потокового вывода. Пусть, например, у меня есть фукнция Debug::print(const std::string&);

> И мне нужно создать объект ostream Debug::cout, который будет использывать для вывода эту функцию print. Сейчас я просто создаю свой буфер, который наследует от std::basic_stringbuf, и переопределяю там функцию xsputn.
>
> То есть делаю вот так:
>
> namespace Debug
> {
>     class    debug_streambuf : public std::basic_stringbuf<char, std::char_traits<char> >
>     {
>     protected:
>         typedef    std::char_traits<char>    _Traits;
>
>         virtual int xsputn(const char *_Ptr, int _Count)
>         {
>             string    str;
>             str.append(_Ptr, _Count);
>             print(_Ptr);
>             return    _Count;
>         }
>     };
>
>     debug_streambuf    _Mybuf;
>     ostream            сout(&_Mybuf);
> }
>

> Такой метод работает, но не всегда, например у меня не выводятся арифметические переменные, а только строки. Как добиться нужной мне функциональности правильно?

Нужно также переопределить sync() и overflow().

--
Maxim Yegorushkin

Those who do not understand Unix are condemned to reinvent it, poorly. © Henry Spencer
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.