【问题标题】:Programmatically Ignore Cout以编程方式忽略 Cout
【发布时间】:2011-10-11 03:13:50
【问题描述】:

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

在我的场景中,我有很多行代码,其中包含各种#defines 控制某些方法何时产生调试输出。我想这样称呼:

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

【问题讨论】:

  • 好吧,您可以随时将输出重定向到文件或 dev/null!

标签: c++ cout ostream


【解决方案1】:

您可以更改 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";

【讨论】:

  • 更好的是,rdbuf(streambuf*) 返回旧缓冲区,因此您甚至不需要单独调用来获取旧缓冲区并设置新缓冲区。
  • @John Flatness:哦,谢谢,我没有在文档中注意到这一点。修正了我的答案。
【解决方案2】:

为什么您不想重定向输出?如果是因为您希望保留 other 输出,那么您可能不走运。

如果只是为了在演示中不必在终端上键入复杂的 shell 表达式,我建议制作一个启动脚本并在里面进行重定向。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2013-05-14
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多