我有一些代码中散布着这样的结构
if(debug) {
Output << "f1: " << f1() << "\n";
}
现在我想做的是写一个流类Debug
,我可以这样写
Debug << "f1: " << f1() << "\n";
如果设置了一些全局标志,那么这将生成输出,否则不会。
现在:这可以很容易地通过Debug
返回一个流去/dev/null
吞掉输出来完成。问题是f1()
仍然会被评估(并“渲染”成可能更昂贵的文本表示),这可能对性能非常不利。
现在我的问题是:是否有任何技巧可以跳过
"f1: " << f1() << "\n"
完全如果Debug
决定不应该做任何输出?类似于 C++ 为f() && g()
whereg()
不评估 if f()
is的短路false
(我认真考虑编写一个用作输出运算符的流类,&&
但从我读到的内容来看,短路不是为重载而做的operator&&
)