c++ - 如何跟踪写入 std::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;
}

有一个明显的解决方法,将所有内容写入 stringstream 并从中获取字节数,然后将 stringstream 写入流,但这需要额外的时间时间和内存。

我还意识到,如果我要写入的所有数据都是预先存在的字符串,那么就不会有问题。问题在于 some_integersome_other_ Arbitrary_object

最佳答案

使用ostream tellp()方法。

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

您或许还可以编写一个自定义的ostream,它发送到另一个ostream并对发出的字符进行计数。我希望找到一个虚拟方法来在 ostream 中重写以仅写入字符,但我没有找到它:( 您可以重新使用 stringstream 代码并将缓冲区写入替换为写入其他 ostream。 string-stream .cc 大约有 500 行长,所以这还不错。

关于c++ - 如何跟踪写入 std::ostream 对象的字节数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41173044/

相关文章:

c++ - 导入函数 Matlab Coder 和 C++ 可执行文件

c++ - 如何使用枚举类值作为 for 循环的一部分?

c++ - 我正在编写一个 cpp 程序来打印两个数字之间的所有质数。程序运行成功但未打印任何内容

c++ - 链接源文件

c++ - 有没有一种优雅的方式来桥接 Asio 中的两个设备/流?

c++ - 如何消除此枚举到字符串映射代码的样板?

c++ - 抽象类重载 ostream 运算符

c++程序将数字转换为不起作用的单词

c++ - 以编程方式忽略 Cout

c++ - 为什么 shared_ptr 需要保存 weak_ptr 的引用计数?