我在数值数据上有一个Struct点,带有一个returnNext()方法,每次调用时都会在stdout中返回AND post。我还有一系列使用这种方法的单元测试:在那些测试中我想要压缩所有Data的std :: cout,这样我只检查返回值的有效性,而不会使屏幕膨胀消息。 e.g。
{{1}}
一个明显的解决方案是使用预编译器标志/命令从TEST构建中排除std :: cout。但这需要编辑几个模块,并且还会使我的代码变得丑陋。
另一种情况是从控制台使用重定向stdout到dev / null,但这也会抑制stdout我的测试模块。
在程序生命周期的特定时刻,是不是有办法以编程方式压缩/重定向stdout ???
答案 0 :(得分:11)
对于抑制std::cout
的一般问题,您可以将std::basic_ios::rdbuf
与空缓冲区一起使用:
std::cout.rdbuf(nullptr);
答案 1 :(得分:3)
这正是为什么在你的成员函数中使用硬编码的stdout输出是一个坏主意。现在你认为你必须在全球范围内阻止std::cout
,因为你们班级的行为是不灵活的。
相反,将std::cout
调用移动到其他位置(以使其可选),或让它成为任意std::ostream
,您可以将其移至任何地方。