C++ 如何跟踪写入std::ostream对象的字节数?

C++ 如何跟踪写入std::ostream对象的字节数?,c++,iostream,ostream,C++,Iostream,Ostream,我想将一组数据写入ostream对象,并返回写入的字节数。例如: using namespace std; size_t writeStuffToStream(ostream &stream) { stream << some_string << some_integer << some_other_arbitrary_object << endl; return number_of_bytes_written; } 使用

我想将一组数据写入
ostream
对象,并返回写入的字节数。例如:

using namespace std;
size_t writeStuffToStream(ostream &stream)
{
    stream << some_string << some_integer << some_other_arbitrary_object << endl;
    return number_of_bytes_written;
}
使用名称空间std;
大小_t writeStuffToStream(ostream&stream)
{

stream使用
ostream
方法

请注意,如果提供的
ostream
不支持位置,此操作可能会失败。在这种情况下,您可以创建一个临时
ostringstream
来格式化数据,然后提取
字符串
,获取其长度并将其发送到输入
ostream


您可能还可以编写一个自定义的
ostream
,发送到另一个
ostream
,并计算发出的字符数。我希望在ostream中找到一个虚拟方法来重写,以便只写字符,但我没有找到:(您可以重复使用stringstream代码,并将缓冲区写入替换为对其他ostream的写入。
string stream.cc
大约有500行长,所以没有那么糟糕。

使用
ostream
方法

请注意,如果提供的
ostream
不支持位置,此操作可能会失败。在这种情况下,您可以创建一个临时
ostringstream
来格式化数据,然后提取
字符串
,获取其长度并将其发送到输入
ostream


您可能还可以编写一个自定义的
ostream
,发送到另一个
ostream
,并计算发出的字符数。我希望在ostream中找到一个虚拟方法来重写,以便只写字符,但我没有找到:(您可以重复使用stringstream代码,并将缓冲区写入替换为写入另一个ostream。
string stream.cc
大约有500行长,所以这并没有那么糟糕。

是的,我对
tellp()这一事实有点反感。)
并不能保证对所有对象都有效。我已经提到我不想创建一个中间
stringstream
。如果我不能首先计算写入的字节数,我如何创建一个自定义
ostream
来计算写入的字节数?是的,我对
tellp()
不能保证对所有对象都有效。我已经提到我不想创建一个中间
stringstream
。如果我不能首先计算写入的字节数,我如何创建一个自定义
ostream
来计算写入的字节数?你可以链接streambuf对象,这样你就可以得到一个计数从std::streambuf初始化streambuf。在其中,在记录计数器信息后,将操作委托给原始streambuf。这里有一个很好的教程:您可以链接streambuf对象,因此您可以从std::streambuf派生计数streambuf。在其中,在记录计数器信息后,将操作委托给原始streambuf。这是一个很好的教程在这里: