转换发送到std :: ostream的文本

时间:2018-05-31 22:08:40

标签: c++ stream std

我有一个向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}} ...

有什么建议吗?

0 个答案:

没有答案