加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 使用自定义std :: ostream包装文件*

发布时间:2020-12-16 03:22:34 所属栏目:百科 来源:网络整理
导读:我有一个与std :: ostream一起使用的函数.我需要支持使用C文件句柄(FILE *).我应该创建自己的std :: ostream子类,它委托给FILE *吗? 解决方法 正如Ben Voigt指出的那样,你想要将streambuf子类化.南加州大学网站上有一些页面,其中包含 documentation,header
我有一个与std :: ostream一起使用的函数.我需要支持使用C文件句柄(FILE *).我应该创建自己的std :: ostream子类,它委托给FILE *吗?

解决方法

正如Ben Voigt指出的那样,你想要将streambuf子类化.南加州大学网站上有一些页面,其中包含 documentation,header和 source,用于包含文件*的streambuf子类(stdiobuf)的GNU实现.它有一些依赖于它是(GroovX)的一部分的库,但那些应该很容易删除(我将首先删除所有对GVX_TRACE的引用).

有趣的是,尽管Ben Voigt所说,它还提供了std :: iostream的简约子类(stdiostream).但这似乎没有必要,因为stdiostream类用于将stdiobuf类连接到流对象的rdbuf(“读缓冲区”/设置流缓冲区)方法是公共可访问的.

你可以找到更多关于子类化streambuf here的内容(特别是在页面底部,讨论虚拟函数).上面链接的实现覆盖sync,underflow(支持输入)和overflow(支持输出).

关于链接实现的进一步说明:

> init方法使用setgsetp方法设置输入和输出序列的指针.
>行const int num = pptr() – pbase();通过从current output pointer中减去base output pointer来计算要冲洗的字符数(“放置指针”).>无效名为om的变量是mode参数.>名为fd的变量是文件描述符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读