我目前正在尝试实现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'?