我试图写如printf C风格的可变参数函数,它增加了一些额外的参数的包装,但我用起来麻烦:添加额外的参数给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 */
写什么?
即使我想换行功能有一个版本,需要一个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__
:
,但我想,以避免和写入包装的功能。有没有办法做到这一点?
(顺便说一句,我不能使用C++ 11个可变参数模板无论是。)
你已经看过这里:http:// stackoverflow。com/a/150616/2036917 –
@UdoKlein:这个问题只是建议使用'va_list'。我已经知道了,问题是我需要**添加**参数,并且我不知道该怎么做。 – HighCommander4
我不明白为什么你需要使用一个'vprintf'语句。据我所知,你的'wrapper'的额外参数也只是可变的,以便打印正确吗?为什么你不能使用单独的打印语句,或者更好的方式是将它们包含在'wrapper'调用的格式中? – Pankrates