微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个与std :: ostream一起使用的函数.我需要支持使用C文件句柄(FILE *).我应该创建自己的std :: ostream子类,它委托给FILE *吗?

解决方法

正如Ben Voigt指出的那样,你想要将streambuf子类化.南加州大学网站上有一些页面,其中包含 documentation,headersource,用于包含文件*的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的变量是文件描述符.

原文地址:https://www.jb51.cc/c/111599.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐