我有一些代码中散布着这样的结构
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&&)