0

我有一些使用 astd::ostringstream作为临时缓冲区的现有代码。为了提高稳健性,我想定义缓冲区大小的上限(例如 16 KB)。当超出限制时,所有后续附加的数据都应该被静默丢弃。理想情况下,在记录警告之后。

最简单的方法是什么?std::ofstream似乎没有获得其当前大小的有效方法。我只能想到my_stream.str().size(),这似乎效率很低。

当然,我可以通过保留一个额外的计数器来手动跟踪插入字符的数量,但也许我缺少一个优雅的替代方案。我看到它有一个可以替换ofstringstream的内部缓冲区( )。rdbuf()

使用它来解决我的问题是否可能(并且实用)?

4

1 回答 1

4

一种可能的解决方案是将stringbuf扩展到您自己的类中并在ofstringstream. 那么实现你的最大限制应该是微不足道的。看起来stringbuf::overflow是您要重载的功能。

或者,您可以将其包装std::ostringstream在另一个类中,该类size在写入之前进行检查。你如何断定这是低效的?只要不是每次调用都计算大小,它只是向下导航的问题。

编辑:在参考文献中遗漏了“复制”一词,但是是的,一旦你把它包起来,你就可以保留自己的计数器。

或者,您可以tellp尝试找出写入了多少个字符,只要它始终指向结尾即可。

返回值
streampos 类型的整数值,包含输出序列开头和当前位置之间的字符数。

于 2013-01-09T02:01:09.687 回答