- 郑智允 的博客
Amazing
- 2024-1-30 18:19:06 @
一件小事
神奇,C++竟然可以通过增加一个编译的源文件来改变输出的位置和内容。
例子:
helloworld.cpp
#include <iostream>
using std::cout;
int main()
{
cout << "Hello World!\n";
}
helper.cpp
#include <iostream>
#include <sstream>
using std::cout;
using std::streambuf;
using std::stringstream;
class Helper
{
public:
Helper()
: m_original_buffer(cout.rdbuf())
{
cout.rdbuf(m_output.rdbuf());
}
~Helper()
{
cout.rdbuf(m_original_buffer); // 把缓冲区改回来
cout << "m_output的缓冲区:" << m_output.rdbuf() << '\n'; // 输出m_output的缓冲区里面的内容
}
private:
stringstream m_output; // 这个是cout输出到的位置
streambuf* m_original_buffer; // 这个是cout原来的缓冲区
} helper;
编译&运行:
g++ helloworld.cpp helper.cpp -o helloworld && ./helloworld
结果:
m_output的缓冲区:Hello World!