2011-10-11 15 views
10

cout <<のすべての機能を表示しないようにするトリックがあるかどうかは知りませんか?私とデモをまとめるために私と他の人が書いたコードを一緒にハックしようとしています。私はむしろ出力をファイルにリダイレクトせず、WindowsとLinuxの間の互換性のある尺度を持つ解決策が欲しいと思います。プログラムで無視するCout

私のシナリオでは、特定のメソッドがデバッグ出力を生成するときに、さまざまな#definesを制御するコードが多数あります。

cout.off(); 
driverForAffectA(); 
driverForAffectB(); 
cout.on(); 
printSpecializedDebug(); 
exit(0); 
+0

まあ、出力をファイルやdev/nullにいつでもリダイレクトすることができます! – AraK

答えて

16

coutのストリームバッファを変更することができます。

streambuf *old = cout.rdbuf(); 
cout.rdbuf(0); 
cout << "Hidden text!\n"; 
cout.rdbuf(old); 
cout << "Visible text!\n"; 

編集:ジョン・フラットネスへ

おかげであなたは、コードを少し短くすることができますコメント

streambuf *old = cout.rdbuf(0); 
cout << "Hidden text!\n"; 
cout.rdbuf(old); 
cout << "Visible text!\n"; 
+4

'rdbuf(streambuf *)'は古いバッファを返します。古いバッファを取得して新しいバッファを設定する必要はありません。 –

+0

@John Flatness:ああ、ありがとう、ドキュメントで気付かなかった。私の答えを修正しました。 – GWW

1

正確にあなたが出力をリダイレクトしたくないのはなぜ? があるので他の出力を保存したい場合は、運が悪い可能性があります。

デモのターミナルで複雑なシェル式を入力する必要がない場合は、開始スクリプトを作成して内部でリダイレクトすることをおすすめします。

これは、または、メインの上部の近くの/dev/nullにstdoutを再び開きます。