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 {
};