Dynamiczne rzutowanie void* na wskaźnik do funkcji z podaną ilością argumentów tego samego typu

0

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ć.

0

Wydaje mi się, że możesz zrobić coś w stylu

void* Call(void (*pointerToFunction)(Args...), Args... args)
{
    pointerToFunction(args);
}

Ale lepiej chyba byłoby jakbyś skorzystał z std::initializer_list

dodanie znaczników <code class="cpp"> i `` - furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1