以编程方式忽略Cout

Mik*_*ail 10 c++ cout ostream

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

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

cout.off();
driverForAffectA();
driverForAffectB();
cout.on();
printSpecializedDebug();
exit(0);
Run Code Online (Sandbox Code Playgroud)

GWW*_*GWW 17

你可以改变cout的流缓冲区.

streambuf *old = cout.rdbuf();
cout.rdbuf(0);
cout << "Hidden text!\n";
cout.rdbuf(old);
cout << "Visible text!\n";
Run Code Online (Sandbox Code Playgroud)

编辑:

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

streambuf *old = cout.rdbuf(0);
cout << "Hidden text!\n";
cout.rdbuf(old);
cout << "Visible text!\n";
Run Code Online (Sandbox Code Playgroud)

  • 更好的是,`rdbuf(streambuf*)`返回旧的缓冲区,所以你甚至不需要单独的调用来获取旧的缓冲区并设置一个新的缓冲区. (4认同)