我有一个项目需要我在流中插入一个过滤器,以便根据过滤器修改传出数据。经过一番研究,似乎我想做的是像这样创建一个filtered_streambuf:
template <class StreamBuf>
class filtered_streambuf: public StreamBuf
{ ... }
然后将 afiltered_streambuf<>
插入我需要过滤的任何流中。我的问题是我不知道在过滤流时需要维护哪些不变量,以确保
- 派生类可以按预期工作。特别是,我可能会发现我已经在其他过滤流缓冲区之上构建了过滤流缓冲区。
- 所有各种流插入器、提取器和操纵器都按预期工作。
问题是我似乎无法弄清楚我需要提供的最小接口是什么,以保证 iostream 将具有正常工作所需的内容。
特别是,我是否需要伪造受保护指针变量的移动?我是否需要一个假数据缓冲区?我可以重写公共函数,根据基本流缓冲区重写它们,还是太简单了?