2011-10-11 57 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附近的主要顶部的地方。