【问题标题】:How do I build a filtered_streambuf based on basic_streambuf?如何构建基于 basic_streambuf 的过滤流缓冲区?
【发布时间】:2010-04-20 21:18:56
【问题描述】:

我有一个项目需要我在流中插入一个过滤器,以便根据过滤器修改传出数据。经过一番研究,似乎我想做的是像这样创建一个filtered_streambuf:

template <class StreamBuf>
class filtered_streambuf: public StreamBuf
{ ... }

然后将filtered_streambuf&lt;&gt; 插入我需要过滤的任何流中。我的问题是我不知道在过滤流时需要维护哪些不变量,以确保

  • 派生类可以按预期工作。特别是,我可能会发现我已经在其他过滤流缓冲区之上构建了过滤流缓冲区。
  • 所有各种流插入器、提取器和操纵器都按预期工作。

问题在于,我似乎无法弄清楚我需要提供什么最小接口才能确保 iostream 具有正常工作所需的内容。

特别是,我是否需要伪造受保护的指针变量的移动?我是否需要一个假数据缓冲区?我可以重写公共函数,根据基本流缓冲区重写它们,还是太简单了?

【问题讨论】:

    标签: c++ iostream streambuf


    【解决方案1】:

    Boost.Iostreams 可能对你有用。

    来自文档:

    Boost.Iostreams 有三个目标:

    • 为了方便创建标准 C++ 流和流缓冲区 访问新的 Sources 和 Sinks。
    • 定义过滤器提供一个框架并将它们附加到标准 流和流缓冲区。
    • 提供一系列即用型过滤器、源和 水槽。

    我自己几乎没有使用过那个库,所以我不能进一步评论。

    【讨论】:

    • 是的,我已经看到 Boost 具有定义过滤器的功能,我可能会在稍后过渡到它,但现在我发现了我的知识上的一个重大差距,我会喜欢填满它!
    • 好的,我接受这个答案。过滤 ostreams 问题的实际解决方案似乎比我希望的要困难得多,而且我得到的关于如何做到这一点的最佳线索来自对 boost 代码的逆向工程。我将一有机会就过渡到 boost 库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2015-12-31
    • 1970-01-01
    • 2011-11-14
    • 2021-10-06
    相关资源
    最近更新 更多