gpt4 book ai didi

c++ - 推迟函数调用参数的评估

转载 作者:行者123 更新时间:2023-11-28 07:09:27 25 4
gpt4 key购买 nike

我编写了一个带有两个或更多参数的小型日志记录类:

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 测试包装调用之外,是否有一种干净的方法可以用 C++11 解决这个问题?

最佳答案

不确定是否有帮助,但这是我之前实现日志记录模块的方式:

在头文件中:

#define LOG(level,...) do {if (level >= MIN_LEVEL) log_printf(__VA_ARGS__);} while (0)

void log_printf(const char* data,...);

在源文件中:

void log_printf(const char* data,...)
{
char str[64] = {0}; // You can think of other ways for allocating it
va_list args;
va_start(args,data);
vsnprintf(str,sizeof(str),data,args);
va_end(args);
printf(str);
}

为了发出日志消息,您只需要调用LOG(SOME_LEVEL,some-parameters)

关于c++ - 推迟函数调用参数的评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21246248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com