2010-04-25 51 views
4

我想编写一个简单的ostream,其中包含一个参数ostream,并在将其传递给参数流之前以某种方式更改流。这种转换很简单,就像改变一个字母或擦除一个字编写一个ostream过滤器?

ostream继承的简单类会是什么样子?我应该覆盖哪些方法?

回答

2

std::ostream不是实现过滤的最佳位置。它没有适当的虚拟功能让你这样做。

你可能想要写含有包裹std::ostream(或包裹std::streambuf),然后使用该std::streambuf创建std::ostreamstd::streambuf派生的类。

std::streambuf有一个虚拟函数overflow,您可以重写并使用它来在将字节传递给包装的输出类之前更改字节。

0

我一直认为编写专门的流是几乎任何问题的错误方法。输出流通常是程序中的一个终点 - 任何数据处理都应该在到达流本身之前完成。对于输入流也是如此 - 将所需的智能(比如说)解析输入到流中是把它放在错误的地方。当然,我的2美分。

+0

当然。它可能是插入诸如压缩或加密之类的字节过滤器的明智之处(将这些功能透明地添加到已经序列化为ostream的代码中),但它可能不是正确的操作结构化数据的地方。 – 2010-04-25 10:49:45