【发布时间】:2012-08-03 16:48:24
【问题描述】:
我有一些代码中散布着这样的结构
if(debug) {
Output << "f1: " << f1() << "\n";
}
现在我想做的是写一个流类Debug 我可以这样写
Debug << "f1: " << f1() << "\n";
如果设置了一些全局标志,那么这将生成输出,否则不会。
现在:这可以通过让Debug 返回一个流向/dev/null 的流来完成,这将吞噬输出。问题是f1() 仍然会被评估(并“渲染”成可能更昂贵的文本表示),这可能对性能非常不利。
现在我的问题是:是否有任何技巧可以跳过
的“评估”"f1: " << f1() << "\n"
如果Debug 决定不进行任何输出?类似于 C++ 为 f() && g() 所做的短路,如果 f() 是 false 则不评估 g() (我认真考虑编写一个使用 && 作为输出运算符的流类,但从我读到的简短- 重载时不进行电路operator&&)
【问题讨论】:
-
This related question 今天早些时候可能有解决方案。
-
@juanchopanza:这些问题仍然(可能)评估论点。我认为这不能按要求完成,除非您将格式切换为
DEBUGOUT("f1: " << f1() << "\n"); -
@MooingDuck 是的。他们只避免流式传输。
-
这个 SO 看起来很相似:stackoverflow.com/questions/5035840/…
-
@MooingDuck: 除了使用evil macro的那个。
标签: c++