我正在创建一个特殊的std :: streambuf和std :: ostream实现。为此我需要实现std::streambuf::overflow
函数。该功能受保护,仅在std::streambuf::sputc
和std::streambuf::xsputn
且只有在缓冲区中没有更多空间(即pptr() == epptr()
)时调用。默认行为是返回eof
,因此调用该函数代替sputc
显然是不正确的。正确执行std :: streambuf :: overflow
不过的std::stringbuf
都GNU libc实现,并推动实施中Boost.Format库boost::io::alt_stringbuf
还检查是否pptr() < epptr()
和这种情况下简单地追加字符。在后一种情况下,即使通过拨打sputc
(因此依靠它不会在缓冲区中仍有空间的情况下不会调用overflow
)这一事实,也会大胆。
执行此案的原因是什么?
好吧,我不太了解其他情况下,overflow(eof())
,要么。尽管它明确指定,但似乎并未在任何地方实际使用。