【发布时间】:2011-09-13 22:45:46
【问题描述】:
我目前正在尝试实现 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'?
【问题讨论】:
-
<< std::endl确实是<< '\n' << std::flush;。 -
有更简单的方法来做你想做的事。也许如果你问一个关于真正问题的问题,你可以得到关于解决它的最佳方法的建议。
标签: c++ stringbuffer endl