我有一个项目,要求我将过滤器插入流中,以便根据过滤器修改外发数据。经过一番研究,看来我想做的就是创建一个过滤_streambuf这样的事情:

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

然后插入 filtered_streambuf<> 进入哪个流,我需要过滤。我的问题是,我不知道在过滤流时需要维护什么不变,以确保

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

问题在于,我似乎无法确定我需要提供的最小界面,以确保iostream将具有正常工作所需的功能。

特别是,我是否需要伪造受保护的指针变量的运动?我是否需要假数据缓冲区?我可以覆盖公共功能,以基础流的方式重写它们,还是太简单了?

有帮助吗?

解决方案

boost.iosstreams 可能对您有用。

从文档中:

BOOST.IOSTREAMS具有三个目标:

  • 为了使创建标准的C ++流和流缓冲区易于访问新来源和水槽。
  • 提供一个框架 定义过滤器 并将它们连接到标准流和流缓冲区。
  • 提供一系列现成的过滤器,来源和水槽。

我本人几乎没有使用过这种性欲,所以我无法进一步评论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top