我有一个向std::ostream
发送内容的函数。
像这样的东西
void f(std::ostream& oss) {
oss << "Hello world!";
}
现在,我想创建自己的类,它派生自std::ostream
,它将解析外发文本并更改它,因此它会打印“Ola world!”,例如。
class StreamConverted : public std::ostream {
...
};
我相信(我对流操作没有太多经验)我必须与流的基础rdbuf()
“玩”,所以我必须替换rdbuf
std::ostream
和我一起。
MyStreamBuf m_my_streambuf;
std::ostream& m_original_stream
std::streambuf* m_original_streambuf;
public:
StreamConverted(std::ostream& os)
: m_original_stream(os)
, m_original_streambuf(os.rdbuf(&m_my_streambuf))
{}
(请原谅我任何明显的错误或错别字。我在飞行中写这一切。我还会添加析构函数来恢复原始的streambuf。)
这使我需要编写MyStreamBuf
来自std::streambuf
class MyStreamBuf : public std::streambuf {
};
std::streambuf::setp(begin, end)
这就是我需要建议的时刻。
我应该通过调用overflow()
来创建自己的缓冲区,然后覆盖ostream
方法以在调用缓冲区时解析缓冲区的内容,然后在''之后将数据发送到原始的streambuf'以某种合理的方式'转换缓冲区?
我不确定我是否会修改缓冲区而不是使用{{1}} ...
有什么建议吗?