【发布时间】:2014-01-20 23:28:12
【问题描述】:
我编写了一个带有两个或多个参数的小型日志记录类:
void my_log(int level, pattern [, fillins...]);
(模式和填充以类似 sprintf 的方式处理。)
my_log 的实现开始:
if ( level < _min_level ) return;
我认为这会整齐地缩短对 very_elaborate_representation() 的调用 ...
my_log(DEBUG, "%s", my_object.very_elaborate_representation());
当 _min_level 大于 DEBUG 时。
但它没有:显然(并不奇怪)参数在函数调用之前被评估。
格式化成本高昂,仅用于调试和故障排除。
除了用 if-test 包装调用之外,还有没有一种干净的方法可以用 C++11 解决这个问题?
【问题讨论】:
标签: c++ c++11 argument-passing