Mam kawałek kodu:
typedef void* (*Func0)();
typedef void* (*Func1)(int arg1);
/* ... */
typedef void* (*Func5)(int arg1, int arg2, int arg3, int arg4, int arg5);
void* Call(void* pointerToFunction, Args... args)
{
switch(sizeof...(args))
{
case 0: return ((Func0)pointerToFunction)(args);
case 1: return ((Func1)pointerToFunction)(args);
...
case 5: return ((Func5)pointerToFunction)(args);
}
}
Chciałbym go zamienić tak, aby typ wskaźnika do funkcji był określany dynamicznie podczas działania programu coś w stylu:
void* Call(void* pointerToFunction, Args... args)
{
int argCount = sizeof...(args);
return ((dynamic_type<void*, int, argCount>)pointerToFunction(args)
}
Tylko nie wiem czy jest to możliwe w C++? Oczywiście rzutowanie na (dynamic_type<void,int,argCount)*) oczywiście tylko obrazuje co chce uzyskać.