对于教育目的,我想创建一个ostream和流缓冲区这样做:

  1. 修复endians当做 << myVar:;
  2. 存储在一个双端的容器,而不是使用std:状或书面文件
  3. 日志的额外数据,例如有多少次我没有 <<多少次我没有。写量字节我写了多少次我flush().但我不需要的所有信息。

我试图超载,但失败的可怕.我试图过载写这样做

ostream& write( const char* s, streamsize n ) 

在我basic_stringstream2类(I复制贴basic_stringstream到我的加拿大养恤金计划的文件和修改),但代码保持使用basic_ostream.我看过代码,它看起来像我需要超载xsputn(这是不是说在这个页面 http://www.cplusplus.com/reference/iostream/ostream ),但还有什么我需要超载?和我如何构建我的等级(这是什么需要继承等)?

有帮助吗?

解决方案

规范的做法包括在定义自己的streambuf.你应该看看:

其他提示

为+C)我认为你应该看看方面,他们修改对象是写字。你可以保存统计数据在这里以及在多少次你流你的对象。检查了 如何格式我自己的对象时使用STL流? 对于一个例子。

B)你需要创建你自己的streambuf和连接你的ostream到,缓冲区(constructor个参数)。看看 吕克的链接 + 出新的streambuf类.在短期需要实现这一ostream(最少):

  • 溢出(把一个单一的炭或冲缓冲区)(链接)
  • xsputn(把一个char阵列,以缓冲区)(链接)
  • sync(链接)

我不知道你想要做什么是可能的。的 << 运营商不是虚拟的。所以你可以定义 yourstream &operator << (yourstream &strm, int i) 做什么你想要的endian转换和计数,并将工作时,你的代码通话。但如果你通过一yourstream象成一个函数,预计ostream,任何时候功能的电话 <<, 它将原ostream版本,而不是你的。

我的理解是,流的设施已经设立了这样,你可以"轻松地"定义的一种新的流类型使用一种不同的缓冲区(像,也就是说,一个双端的chars),并且可以很容易地增加支持,用于输出自己的类通过 <<.我不认为你是旨在能够重新定义的中间层之间的那些。

特别是,整个点的 << 接口,以提供很好的格式的文本的输出,虽然这听起来像你真的想二进制的输出。(否则的参考"endian"没有任何意义。) 即使假设有一些这样做的方法我不知道,这会产生尴尬的二进制输出最好的。例如,考虑最终用户过载于输出一点在3D空间。终端用户的版本 << 可能会做这样的事情 << '(' << x << ", " << y << ", " << z << ')'.这看起来不错在一个文本流,但这是一个很大的浪费,并完全无用的人物,在一个二流,这最好只使用 << x << y << z.(及有多少电话来 << 应该为那些最为?)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top