gpt4 book ai didi

c++ - 使用自定义 std::ostream 包装 FILE*

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:12 26 4
gpt4 key购买 nike

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

最佳答案

正如 Ben Voigt 所指出的,您想要子类化 streambuf。南加州大学网站上的某些页面有 documentation , header , 和 source对于包装 FILE*streambuf 子类 (stdiobuf) 的 GNU 实现。它对作为 (GroovX) 一部分的库有一些依赖性,但这些应该很容易删除(我将从删除对 GVX_TRACE 的所有引用开始)。

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

您可以找到有关子类化 streambuf 的更多信息 here (特别看页面底部,讨论虚函数)。上面链接的实现覆盖了 sync , underflow (支持输入)和 overflow (以支持输出)。

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

  • init 方法使用 setgsetp方法来设置输入和输出序列的指针。
  • const int num = pptr()-pbase(); 行通过减去 base output pointer 来计算要刷新的字符数来自 current output pointer (“放置指针”)。
  • 无用的名为 om 的变量是模式参数。
  • 名为fd 的变量是文件描述符。

关于c++ - 使用自定义 std::ostream 包装 FILE*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com