我有一些代码,其中散布着这样的结构:
if(debug) {
Output << "f1: " << f1() << "\n";
}
现在我想要做的是编写一个流类Debug
,我可以像这样编写它:
Debug << "f1: " << f1() << "\n";
如果设置了某个全局标志,则会生成输出,否则不会。现在可以通过使
Debug
返回一个流并将其发送到/dev/null
来轻松完成此操作,这将吞噬输出。问题是f1()
仍然会被评估(并且被呈现为可能更昂贵的文本表示),这可能对性能非常不利。现在我的问题是:有没有任何技巧可以跳过对f1()
的“评估”?"f1: " << f1() << "\n"
如果
Debug
决定不输出任何内容,那么是否可以完全禁用输出?这与C++对于f() && g()
的短路操作类似,如果f()
为false
,则g()
不会被执行。(我曾经考虑编写一个使用&&
作为输出运算符的流类,但据我所读,重载的operator&&
不能进行短路操作。)