我有一个目前看起来像这样的函数:
void log(uint8_t level, const char* fmt, ...) {
va_list va;
va_start(va, fmt);
char msg[128];
int msg_size = vsnprintf(msg, 128, fmt, va);
va_end(va);
callback->dosomething(level, msg); // some api
}
我想把它转换成,
void log(uint8_t level, const char* fmt, Args... args) {
va_list va;
va_start(va, fmt);
char msg[128];
int msg_size = vsnprintf(msg, 128, fmt, va); // do some things similar here with args
va_end(va);
callback->dosomething(level, msg); // some api
}
有人可以帮我吗?
最佳答案
这是一种方法:
template<class... Args>
void log(uint8_t level, const char* fmt, Args&&... args) {
char msg[128];
int msg_size = std::snprintf(msg, 128, fmt, std::forward<Args>(args)...);
callback->dosomething(level, msg); // some api
}
请注意,我使用的是 snprintf
而不是 va_list
特定的 vsnprintf
。
Demo
https://stackoverflow.com/questions/68627831/