如何创建自己的ostream/streambuf?

22 c++ ostream streambuf

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

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

我尝试过载,但失败的可怕.我试着通过写入来重载

ostream& write( const char* s, streamsize n ) 
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*tte 24

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


man*_*ake 6

对于A + C)我认为你应该看一下facets,它们会修改对象作为字符的写法.您可以在此处存储统计信息以及流式传输对象的次数.看看如何在使用STL流时格式化我自己的对象?举个例子.

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

  • 溢出(放一个字符或刷新缓冲区)(链接)
  • xsputn(将一个char数组放到缓冲区)(链接)
  • 同步(链接)