我正在尝试为像 printf 这样的 C 风格的可变参数函数编写一个包装器,它添加了一些额外的参数,但我遇到了麻烦:
void printf(char* fmt, ...); // the thing I'm trying to wrap
void wrapper(char* fmt, ...)
{
printf(fmt, extra_arg1, extra_arg2, /* the variadic arguments */);
}
但我写/* the variadic arguments */
什么?
即使我要包装的函数有一个需要 a 的版本va_list
,我也做不到:
void vprintf(char* fmt, va_list args);
void wrapper(char* fmt, ...)
{
va_list args;
va_start(args, fmt);
vprintf(fmt, extra_arg1, extra_arg2, args);
va_end(args);
}
extra_arg1
,extra_arg2
并且args
不要神奇地变成va_list
期望的vprintf
。
我知道我可以编写一个宏并使用__VA_ARGS__
:
void printf(char* fmt, ...); // the thing I'm trying to wrap
#define wrapper(fmt, ...) printf(fmt, extra_arg1, extra_arg2, __VA_ARGS__)
但我试图避免这种情况并将包装器编写为函数。有没有办法做到这一点?
(顺便说一句,我也不能使用 C++11 可变参数模板。)