以编程方式忽略Cout

时间:2011-10-11 03:13:50

标签: c++ cout ostream

有没有人知道是否有一个技巧可以切换所有cout <<函数以不打印出可见输出?我试图将我和其他人编写的一些代码组合起来组合一个演示。我宁愿不将输出重定向到一个文件,并且想要一个在Windows和Linux之间具有一定程度兼容性的解决方案。

在我的场景中,我有许多代码行,当某些方法生成调试输出时,各种#defines控制。我想打电话给:

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

2 个答案:

答案 0 :(得分:16)

您可以更改cout的流缓冲区。

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

编辑:

感谢John Flatness的评论,您可以稍微缩短代码:

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

答案 1 :(得分:1)

为什么您不想重定向输出?如果是因为你希望保留其他输出,那么你可能会失去运气。

如果它只是这样您不必在演示中的终端上键入复杂的shell表达式,我建议创建一个启动脚本并在内部进行重定向。

那,或者在主要顶部附近的某个地方重新开启stdout到/dev/null