2011-08-26 110 views
2

是否有可能以某種方式捕獲cout,以便每個標準輸出(cout << "example";)自動調用函數(myfunc("example");)?將cout捕獲/重定向到函數

+1

[Override C++ streams]可能的重複(http://stackoverflow.com/questions/7169136/override-c-streams) –

回答

2

一種方法是創建一個類有適當的operator<<重載並創建一個名爲cout全局實例,並using std::whatever而不是using namespace std;。然後很容易就可以從您的定製coutstd::cout來回切換。

雖然這只是一個解決方案(可能需要大量的工作,比您想花費的多),但我確信其他人知道更好的方法。

+0

感謝您的想法,這可能是最好的方法,並有[在工作代碼示例中「覆蓋C++流」](http://stackoverflow.com/questions/7169136/override-c-streams#7169195)(謝謝@Tomalak Geret'kal的鏈接)。我會繼續使用命名空間std,然後調用我的stringstream其他東西。 – basic6

+0

@ basic6 ok,所以你會有'MyStream sout'之類的東西,並且所有東西都是'sout << stuff'。然後,當你想改回'cout'時,你可以改變'MyStream sout';'改成'ostream&sout = cout;'然後它會再次變成'cout'。如果它回答了你的問題,你會將此標記爲答案嗎? –