当前位置:  开发笔记 > 编程语言 > 正文

如何创建自己的ostream/streambuf?

如何解决《如何创建自己的ostream/streambuf?》经验,为你挑选了2个好方法。

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

    做<< myVar时修复endians;

    存储在deque容器中而不是使用std:cout或写入文件

    记录额外的数据,例如我做了多少次<<,我做了多少次.write,我写的字节数和flush()的次数.但我不需要所有的信息.

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

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

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



1> Luc Hermitte..:

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

Angelika LAnger关于IOStreams派生的文章

James Kanze关于过滤streambufs 的文章

boost.iostream用于应用程序的示例



2> mandrake..:

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

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

溢出(放一个字符或刷新缓冲区)(链接)

xsputn(将一个char数组放到缓冲区)(链接)

同步(链接)

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有