我想将一堆数据写入 ostream
对象,然后返回编写的字节数。例如:
using namespace std;
size_t writeStuffToStream(ostream &stream)
{
stream << some_string << some_integer << some_other_arbitrary_object << endl;
return number_of_bytes_written;
}
有一个明显的解决方法,将所有内容都写入stringstream
并将字节计数从中计算出来,然后将stringstream
写入流,但这需要额外的时间和内存。
我还意识到,如果我想编写的所有数据都是先前存在的字符串,那就没有问题了。问题是some_integer
和some_other_arbitrary_object
。
使用ostream
tellp()
方法。
请注意,如果提供的ostream
不支持位置,则可能会失败。在这种情况下,您可以创建一个临时ostringstream
以格式化数据,然后提取string
,获取长度并将其发送到输入ostream
。
您可能还可以编写发送给另一个ostream
并计数发射字符的自定义ostream
。我希望找到一种虚拟方法来覆盖Ostream仅写字符,但是我没有找到它:(您可以重新使用弦乐代码并替换缓冲区写入为其他Ostream。string-stream.cc
大约500行。,所以这还不是很糟糕。