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

C++ 转换发送到std::ostream的文本,c++,stream,std,C++,Stream,Std,我有一个函数,可以将内容发送到std::ostream。 像这样的 void f(std::ostream& oss) { oss << "Hello world!"; } 我相信(我对流操作没有太多经验)我必须“玩”流的底层rdbuf(),因此我必须用我的std::ostream替换rdbuf MyStreamBuf m_my_streambuf; std::ostream& m_original_stream std::streambuf*

我有一个函数,可以将内容发送到
std::ostream
。 像这样的

void f(std::ostream& oss) {
    oss << "Hello world!";
}
我相信(我对流操作没有太多经验)我必须“玩”流的底层
rdbuf()
,因此我必须用我的
std::ostream
替换
rdbuf

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。)

这导致我需要编写源于
std::streambuf

class MyStreamBuf : public std::streambuf {
};
我需要建议的时候到了。

我是否应该通过调用
std::streambuf::setp(begin,end)
创建自己的缓冲区,然后覆盖
overflow()
方法,在调用缓冲区时解析缓冲区的内容,然后在“以某种合理的方式”转换缓冲区后将数据发送到原始streambuf

我不确定我是否要修改缓冲区,而不是使用
ostream


有什么建议吗?

在我看来,这真的不是流应该做的事情-我想说
oss没有必要派生一个定制的
ostream
类,只是一个定制的
streambuf
(您可以从
std::stringbuf
派生它来帮助您),然后可以通过其
basic\u streambuf*
构造函数或
rdbuf()
setter将其与标准
std::ostream
一起使用。在将其发送到您想要写入的任何输出之前,请使用
streambuf
class'
sync()
方法进行翻译。@NeilButterworth我实际上没有做
oss@RemyLebeau的自由-听起来很有趣!
class MyStreamBuf : public std::streambuf {
};