将 cout 或 cerr 重定向到文件非常容易。我可以用它来将第三方输出重定向到文件。但是,当我将第三方输出重定向到文件后,我自己如何使用 cout 输出到控制台?
我是 RAII 的忠实粉丝,所以我曾经编写过这个小助手类。它将重定向流,直到它超出范围,此时它会恢复原始缓冲区。相当方便。 :)
class StreamRedirector {
public:
explicit StreamRedirector(std::ios& stream, std::streambuf* newBuf) :
savedBuf_(stream.rdbuf()), stream_(stream)
{
stream_.rdbuf(newBuf);
}
~StreamRedirector() {
stream_.rdbuf(savedBuf_);
}
private:
std::streambuf* savedBuf_;
std::ios& stream_;
};
可以这样使用:
using namespace std;
cout << "Hello stdout" << endl;
{
ofstream logFile("log.txt");
StreamRedirector redirect(cout, logFile.rdbuf());
cout << "In log file" << endl;
}
cout << "Back to stdout" << endl;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)