[Q] Problem with derived from streambuf class

Paolo Carlini pcarlini@suse.de
Sun Oct 17 20:49:00 GMT 2004


zaufi@sendmail.ru wrote:

>If this is normal can you please explain me right way to handle std::endl
>
Probably there are other ways to deal with this issue, but what I would 
suggest
now is just reimplementing std::endl.

  template<class charT, class traits>
    basic_ostream<charT, traits>& endl(basic_ostream<charT, traits>& os);

In the standard, its behavior is: os.put(os.widen('\n')), then 
os.flush(). The
latter, in turn, boils down to rdbuf()-pubsync(), which simply calls the
streambuf::sync() virtual. The latter is basically an overflow().

Therefore, in implementing it, you would directly use syslogbuf::sputc() 
(instead
of os.put which ends up calling the "wrong" sputc()), and 
syslogbuf::overflow()
(yes, unfortunately I think that in general you should redefine it, 
besides xsputn)

I hope you will find these few lines useful: in my opinion, if you are 
going to
heavily work on such topics, I should get a good book, like Langer & Kreft.

Paolo.



More information about the Libstdc++ mailing list