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 SpencerPosted via RSDN NNTP Server 1.9