如何基于basic_streambuf构建filtered_streambuf?

时间:2010-04-20 21:18:56

标签: c++ iostream streambuf

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

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

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

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

麻烦的是,我似乎无法弄清楚我需要提供的最小接口是什么,以保证iostream将具备正常工作所需的内容。

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

1 个答案:

答案 0 :(得分:1)

Boost.Iostreams可能对您有用。

来自文档:

  

Boost.Iostreams有三个目标:

     
      
  • 为了便于创建标准C ++流和流缓冲区   访问新的来源和接收器。
  •   
  • 定义过滤器提供框架并将其附加到标准   流和流缓冲区。
  •   
  • 提供一系列即用型过滤器,来源和   汇。
  •   

我自己几乎没用过这个图书馆,所以我不能再评论了。