2011-08-26 98 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'。如果它回答了你的问题,你会将此标记为答案吗? –