我有一些代码散布着这样的结构
if(debug) {
Output << "f1: " << f1() << "\n";
}
现在我想做的是编写一个流类Debug
我可以这样写
Debug << "f1: " << f1() << "\n";
如果设置了某个全局标志,那么这将生成输出,否则不会。
现在:这可以很容易地通过制作来完成Debug
返回一个流/dev/null
这会吞噬输出。问题是f1()
仍然会被评估(并“渲染”成可能更昂贵的文本表示),这可能对性能非常不利。
现在我的问题:是否有任何技巧可以允许跳过“评估”
"f1: " << f1() << "\n"
完全如果Debug
决定不应该进行任何输出?类似于 C++ 所做的短路f() && g()
where g()
不评估如果f()
is false
(我认真考虑过编写一个使用&&
作为输出运算符,但从我读到的来看,过载并没有完成短路operator&&
)
你能做的就是定义这个宏:
#define Debug_Stream \
if(!debug); else Output
这将使:
Debug_Stream << "f1: " << f1() << "\n";
变得等价于:
if(debug) {
Output << "f1: " << f1() << "\n";
}
但从字面上看(加上空白以提高可读性)
if(!debug);
else
Output << "f1: " << f1() << "\n";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)