我正在努力实现这样的目标:
void sum(int a, int b){ printf("result: %d", a+b); }
void callFunc(void (*funct)(...), ...)
{
va_list ars;
va_start(ars, funct);
funct(ars);
va_end(ars);
}
int main()
{
callFunc(sum, 2,3);
return 0;
}
但这不起作用,因为需要两个va_list
s,funct
参数和参数传递。但是,即使我尝试传递sum函数,也会说:error: invalid conversion from 'void (*)(int, int)' to 'void (*)(...)'
那么如何让这个作品老C风格呢?
答案 0 :(得分:3)
你不能这样做。这根本不可能。
你可以做的最好的事情(保持通用)是改变funct
以取va_list
,就像vprintf
一样。但是,这可能对你的目的不会很有效。
或者,你可以做一个宏:
#include <stdio.h>
#define CALL_FUNC(func, ...) func(__VA_ARGS__)
void sum(int a, int b){ printf("result: %d", a+b); }
int main()
{
CALL_FUNC(sum, 2, 3);
return 0;
}