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

前端之家收集整理的这篇文章主要介绍了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的变量是文件描述符.

猜你在找的C&C++相关文章