如何使用运算符<<获取在ostream中写入了多少个字符?或者如何阅读所写的内容?

How to get how many chars were written in a ostream with the operator<<? Or how to read what was written?

1)
我想在运算符 << 中进行重载,以便我可以打印模板矩阵 T.

我想使用模板 class 的运算符 << 并且为了对齐它我必须知道写入的字符数并在最后添加空格直到某个字符数。

但是,我不知道如何(如果可以的话)获取写入的字符串或写入的字符数...


2)
我需要表演

cout << myobject  

在for中多次。然而,这个 operator<< 花了很多时间,所以我只想用一次并存储它的结果。 我该怎么做才能避免一遍又一遍地使用相同的方法?


有什么想法吗?

一般来说,你不能。 std::ostream 提供的最相似的东西是 tellp 方法,它为您提供当前文件中的位置。不幸的是,由于您关心与最后一个换行符相关的位置,这对您没有帮助;此外,在许多常见情况下甚至没有实现此方法(标准输出 "file" 或套接字中的位置是什么?)。

至于把写的东西提取出来,就不用了。底层 streambuf 不必保留这些数据 - 事实上,它甚至可以在每个字符被写入后立即刷新到底层设备(这几乎是无缓冲输出发生的情况)。

第一个问题的解决方案。

  1. 用一个std::ostringstream写一个矩阵的元素
  2. std::ostringstream 中获取 std::string
  3. 编写一个函数,在字符串的左侧或右侧添加填充,以便生成的字符串具有给定的长度。
  4. 使用填充后的字符串在 std::coutstd::ofstream 中创建最终输出。

你会对这样的东西感兴趣吗?

│1         2         300       │
│1         463       6         │
│165       286       34457     │

│1.000000  0.000000  0.000000  │
│0.000000  1.000000  0.000000  │
│0.000000  0.000000  1.000000  │

│Hello     World!    This      │
│is        a         test      │
│to        create    spaces    │

代码很粗糙,您可能需要对其进行调整以补偿 32 位和 64 位。

我想你也可以修改它,这样你就可以使用制表符,它默认占用 8 个空格。

在线代码示例:https://rextester.com/IFXUFZ49322