我想编写一个简单的ostream
,其中包含一个参数ostream
,并在将其传递给参数流之前以某种方式更改流。这种转换很简单,就像改变一个字母或擦除一个字编写一个ostream过滤器?
从ostream
继承的简单类会是什么样子?我应该覆盖哪些方法?
我想编写一个简单的ostream
,其中包含一个参数ostream
,并在将其传递给参数流之前以某种方式更改流。这种转换很简单,就像改变一个字母或擦除一个字编写一个ostream过滤器?
从ostream
继承的简单类会是什么样子?我应该覆盖哪些方法?
std::ostream
不是实现过滤的最佳位置。它没有适当的虚拟功能让你这样做。
你可能想要写含有包裹std::ostream
(或包裹std::streambuf
),然后使用该std::streambuf
创建std::ostream
从std::streambuf
派生的类。
std::streambuf
有一个虚拟函数overflow
,您可以重写并使用它来在将字节传递给包装的输出类之前更改字节。
我一直认为编写专门的流是几乎任何问题的错误方法。输出流通常是程序中的一个终点 - 任何数据处理都应该在到达流本身之前完成。对于输入流也是如此 - 将所需的智能(比如说)解析输入到流中是把它放在错误的地方。当然,我的2美分。
考虑使用Boost.Iostreams
当然。它可能是插入诸如压缩或加密之类的字节过滤器的明智之处(将这些功能透明地添加到已经序列化为ostream的代码中),但它可能不是正确的操作结构化数据的地方。 – 2010-04-25 10:49:45