cout または cerr をファイルにリダイレクトするのは簡単です。これを使用して、サードパーティの出力をファイルにリダイレクトできます。ただし、サード パーティの出力をファイルにリダイレクトした後、自分で cout を使用してコンソールに出力するにはどうすればよいですか?
			
			1463 次
		
2 に答える
            4        
        
		
私は 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;
    于 2013-01-11T23:03:37.237   に答える
    
    
            4        
        
		
バッファーを保存し、後で復元します。
std::streambuf *buf = std::cout.rdbuf(); //save
// Do other stuff
std::cout.rdbuf(buf); // restore
    于 2013-01-11T22:37:32.733   に答える