私はどこでも関数std :: coutを実行している共有ライブラリを使用しています。コールアウトレベルで何かをすることは可能ですか?ここで私はアウトアウトを抑制するか、それをある場所にリダイレクトできますか?関数内でのcout出力の抑制
このようなことをC++で試みることさえ可能ですか?
私はどこでも関数std :: coutを実行している共有ライブラリを使用しています。コールアウトレベルで何かをすることは可能ですか?ここで私はアウトアウトを抑制するか、それをある場所にリダイレクトできますか?関数内でのcout出力の抑制
このようなことをC++で試みることさえ可能ですか?
このようなことは、リダイレクトするライブラリ呼び出し用の関数ラッパーを作成するだけです。cout
。
int main(void)
{
std::ofstream lStream("garbage.txt");
std::streambuf* lBufferOld = std::cout.rdbuf();
std::cout.rdbuf(lStream.rdbuf());
std::cout << "Calling library function" << std::endl;
std::cout.rdbuf(lBufferOld);
std::cout << "Normal output" << std::endl;
std::cout.rdbuf(lStream.rdbuf());
std::cout << "Calling another library function" << std::endl;
std::cout.rdbuf(lBufferOld);
std::cout << "Another normal output" << std::endl;
lStream.close();
return (0);
}
出力を処理するクラスを作成することで、すべてのI/Oを常にフィルタリングできます。クラスがアプリケーション全体で使用される場合、静的クラスが順番に並んでいる可能性がありますが、必要に応じてクラスのインスタンスをインスタンス化できます。
引数の文字列に基づいて、coutに何かを書くかどうか、あるいは別の出力を選択することに加えて、クラスは選択した出力の種類に基づいてテキストをフォーマットすることもできます。
私はostreamを見ましたが、あなたは直接あなたを修正することはできませんでした。あなたは前に出てきた必要性に遭遇したので、これを読んでいる誰かが、私が提案したクラスを作成する上でより良いアイデアを持っていることを願っています。
私はあなたが共有ライブラリへ[freopenは](http://www.cplusplus.com/reference/clibrary/cstdio/freopen/) 'stdout'前後の各呼び出し可能性があるとします。要件に応じて、パフォーマンスとスレッディングが問題になることがあります。 – Joe
'std :: cout.rdbuf()'を使って出力をファイルにリダイレクトすることができます。 – lapk
また、この共有ライブラリは商業的品質のようではありません。このライブラリのソースコードをお持ちの場合は、ログを無効にして再コンパイルする必要があります。責任あるライブラリは、これをプリプロセッサ定義を使って1か所で行うことができます。 – Joe