创建我自己的ostream / streambuf?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (180)

创建一个ostream和流缓冲区来执行:

  1. 在做<< myVar时修正endians;
  2. 存储在deque容器中而不是使用std:cout或写入文件
  3. 记录额外的数据,比如我做了多少次“,我做了多少次.write,我写的字节数量以及flush()的次数。但我不需要所有的信息。

我尝试超载,但失败可怕。我尝试通过做超负荷写

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

在我的basic_stringstream2类(我复制粘贴basic_stringstream到我的cpp文件并修改它),但代码保持使用basic_ostream。我查看了代码,它看起来像我需要重载xsputn(在这个页面上没有提及http://www.cplusplus.com/reference/iostream/ostream),但是还有什么我需要重载?以及我如何构建我的类(它需要继承什么等)?

提问于
用户回答回答于

规范的方法在于定义你自己的streambuf。你应该看看:

  • Angelika LAnger关于IOStreams派生的文章
  • James Kanze关于过滤streambufs 的文章
  • boost.iostream作为应用程序的例子
用户回答回答于

对于A + C),我认为你应该看看方面,他们修改如何将对象写成字符。您可以在这里存储统计数据,也可以存储多少次流式传输对象。在使用STL流时检查如何格式化我自己的对象?举一个例子。

对于B)需要创建自己的streambuf并将您的ostream连接到该缓冲区(构造函数参数)。查看Luc的链接 + 推出新的streambuf类。总之你需要实现这个ostream(最小):

  • 溢出(放置一个字符或冲洗缓冲区)(链接
  • xsputn(把一个char数组放入缓冲区)(链接
  • 同步(链接

所属标签

可能回答问题的人

  • 找虫虫

    0 粉丝0 提问5 回答
  • 骑牛看晨曦

    4 粉丝522 提问4 回答
  • 爸爸

    腾讯 · 客户端安全 (已认证)

    3 粉丝4 提问4 回答
  • 不吃貓的鱼oo

    5 粉丝466 提问4 回答

扫码关注云+社区

领取腾讯云代金券