В приведенном ниже коде параметры типа float или double не работают, значение всегда неверно. int и строки работают должным образом.
Я собираюсь отказаться от этой конструкции и попробовать что-нибудь еще, если кто-то не обнаружит проблему.
typedef void(*varfunc)(...);
typedef void(*invokefunc)(int, ...);
varfunc func_table[2];
void register_func(int slot, varfunc cb)
{
func_table[slot] = cb;
}
void invoke_func(int slot, void* a1, void* a2, void* a3, void* a4)
{
func_table[slot](a1, a2, a3, a4);
}
void func_1(float a, int b)
{
printf("%f %d", a, b);
}
void func_2(const char* c)
{
printf("%s", c);
}
int main()
{
register_func(0, (varfunc)func_1);
register_func(1, (varfunc)func_2);
((invokefunc)invoke_func)(0, 1.23f, 456);
((invokefunc)invoke_func)(1, "hello world");
return 0;
}