+-
如何使用运算符在一个ostream中写入多少个字符?或者如何读取所写的内容?

1) 我想在运算符<<中重载,这样我就可以打印模板矩阵T.

我想使用模板类的运算符<<并且要对齐它我必须知道写入的字符数,并在最后添加空格直到一定数量的字符。

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

2) 我需要表演

cout << myobject  

好几次。但是,这个运算符<<花了很多时间,所以我只想一次并存储它的结果。我该怎么做才能避免一遍又一遍地使用相同的方法?

有任何想法吗?

1
投票

第一个问题的解决方案。

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

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

至于提取所写的内容,不再是。底层的streambuf不必保留这些数据 - 事实上,它甚至可以在写入时立即刷新到每个单个字符的底层设备(这几乎与无缓冲输出一样)。

0
投票

这样的事情会引起什么兴趣吗?

│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位。

我认为你也可以修改它,以便你可以使用tabbing,默认情况下占用8个空格。

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