我目前正在尝试实现 stringbuf 的子类,以允许缓冲区标记特定字符(在我的情况下为“\n”)并在发生此字符时采取行动(将消息转储到记录器并随后在我的案子)。为了实现这个目标,我覆盖了 sputc (以实现监视 '\n')和 xsputn (确实使用 sputc,因为默认情况下 GCC 实现似乎不这样做)。出于调试目的,我让 sputc 将传递给它的每个字符写出到 stdout。
现在这是我的问题:如果我使用类似的东西
mystream << "Some text" << std::endl;
sputc 接收除应由 std::endl 引入的 '\n' 之外的每个字符,因此未完成预期的操作,因为未传递 '\n'。如果我使用类似的东西
mystream << "Some text" << '\n';
甚至
mystream << "Some text" << "\n" << std::flush;
一切都按预期工作,我的 sputc 实现得到了 '\n' 字符。
所以我的问题是:对于后面的stringbuf,两个代码行不应该完全相同吗?如果不是,我必须重写哪些其他方法才能获得'\ n'?