我目前正在尝试实现stringbuf的子类,以允许缓冲区为特定字符(在本例中为'\ n')进行标记化,并在该字符出现时采取措施(将消息转储到记录器并清除缓冲区)之后是我的情况)。 为了实现这个目标,我覆盖了sputc(实现监视'\ n')和xsputn(确实使用sputc,因为GCC实现默认情况下不这样做)。 出于调试目的,我让sputc写出传递给它的每个字符到stdout。

现在这是我的问题:如果我使用类似的东西 通用标签

sputc接收每个字符,除了应该由std :: endl引入的'\ n'之外,因此未执行预期的操作,因为未传递'\ n'。 如果我使用类似的东西 通用标签

甚至 通用标签

一切正常,我的sputc实现获得了'\ n'字符。

所以我的问题是:关于后面的字符串缓冲,两条代码行难道不应该完全一样吗?如果没有,我还必须重写哪些其他方法来获得'\ n'?

有帮助吗?

解决方案

您不能覆盖sputc,因为sputc不是虚拟的。您需要重载overflowsync,并检查整个未决序列中是否存在\n

除非您可以做一些优化的事情,否则您实际上不需要重载xsputn,因为您知道支持流类型的设备的一些特殊之处。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top