2011-10-11 34 views
10

有誰知道,如果有一招,關掉所有cout <<功能沒有打印出可見的輸出?我試圖將我和其他人編寫的一些代碼拼湊在一起演示。我寧願不將輸出重定向到一個文件,也不希望某個解決方案在Windows和Linux之間具有一定程度的兼容性。編程忽略COUT

在我的情況我有很多代碼行數與各種#defines控制時,某些方法產生調試輸出。我想打電話:

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

那麼,您可以將輸出始終重定向到文件或開發/空! – AraK

回答

16

您可以更改cout的流緩衝區。

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

編輯:

感謝John平整度的評論,你可以縮短代碼位:

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

更好的是,'rdbuf(streambuf *)'返回舊的緩衝區,所以你甚至不需要單獨的調用來獲取舊的並設置一個新的緩衝區。 –

+0

@John平坦度:哦,謝謝我沒有注意到在文檔中。修正了我的答案。 – GWW

1

正是爲什麼你不希望將輸出重定向?如果是因爲有你想保留其他輸出,你可能是出於運氣。

如果它只是讓你不必在一個演示,鍵入一個終端上的複雜的shell的表情,我建議做一個啓動腳本,做內部重定向。

也就是說,或重新打開標準輸出到/dev/null附近的主要頂部的地方。