嗨所以我编写了一些简单的代码来将std :: cout输出重定向到std :: ostringstream,它在main中工作正常,例如。
#include <iostream>
#include <sstream>
int main(){
std::ostringstream m_oss;
std::streambuf *m_sbuf, *bcout;
m_sbuf=m_oss.rdbuf();
bcout = std::cout.rdbuf();
std::cout.rdbuf(m_sbuf);
std::cout<<"hello world"<<std::endl;
std::cout.rdbuf(bcout); // restore cout's original streambuf
std::cout<<m_oss.str();
return 0;
}
但是,如果我想在一个类中进行相同的重定向,那么我会遇到Seg错误 在'std :: cout.rdbuf(m_sbuf);'
这一行e.g
#include <iostream>
#include <sstream>
class test {
public:
std::ostringstream m_oss;
std::streambuf *m_sbuf, *bcout;
test(){
m_sbuf=m_oss.rdbuf();
bcout = std::cout.rdbuf();
std::cout.rdbuf(m_sbuf);
}
void print(){
std::cout.rdbuf(bcout); // restore cout's original streambuf
std::cout<<m_oss.str();
}
};
int main(){
test t();
std::cout<<"Hello world"<<std::endl;
t.print();
return 0;
}
任何想法如何将其封装在一个类中,因为我真的不希望最终用户看到它并感到困惑?
答案 0 :(得分:1)
使用它来实例化对象t
:
test t;
不是
test t();