开发者

Writing an ostream filter?

I'd like to write a simple ostream which wraps an argument ostream and changes th开发者_如何学Pythone stream in some way before passing it on to the argument stream. The transformation is something simple like changing a letter or erasing a word

What would a simple class inheriting from ostream look like? What methods should I override?


std::ostream is not the best place to implement filtering. It doesn't have the appropriate virtual functions to let you do this.

You probably want to write a class derived from std::streambuf containing a wrapped std::ostream (or a wrapped std::streambuf) and then create a std::ostream using this std::streambuf.

std::streambuf has a virtual function overflow which you can override and use to alter the bytes before passing them to the wrapped output class.


Consider using Boost.Iostreams


I've always thought that writing specialised streams is the wrong approach to almost any problem. The output stream is typically an end-point in your program - any data processing should be done long before you get to the stream itself. Similarly for input streams - putting the intelligence needed to (say) parse input in the stream is putting it in the wrong place. Just my 2 cents, of course.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜