1)
我想在运算符<<
中重载,这样我就可以打印模板矩阵T.
我想使用模板类的运算符<<
并且要对齐它我必须知道写入的字符数,并在最后添加空格直到一定数量的字符。
但是,我不知道我怎么能(如果可以的话)获得写入的字符串或写入的字符数...
2) 我需要表演
cout << myobject
好几次。但是,这个运算符<<花了很多时间,所以我只想一次并存储它的结果。我该怎么做才能避免一遍又一遍地使用相同的方法?
有任何想法吗?
第一个问题的解决方案。
std::ostringstream
写入矩阵的元素。std::string
获取std::ostringstream
。std::cout
或std::ofstream
中创建最终输出。一般来说,你不能。 std::ostream
提供的最相似的东西是tellp
方法,它为您提供当前文件中的位置。不幸的是,当你关心与上一个换行相关的位置时,这对你没有帮助;此外,在许多常见情况下,甚至没有实现此方法(标准输出“文件”中的位置,或插槽中的位置?)。
至于提取所写的内容,不再是。底层的streambuf
不必保留这些数据 - 事实上,它甚至可以在写入时立即刷新到每个单个字符的底层设备(这几乎与无缓冲输出一样)。
这样的事情会引起什么兴趣吗?
│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个空格。