You are most there. You do not need a return type from typedef, it must be
typedef int (MyClass::*FuncSig)(int, char*);
Now you just need to use it correctly:
int Caller(FuncSig func, int a, char* some_string) { return (this->*func)(a, some_string); }
You want to pass regular FuncSig instances, not FuncSig* - a FuncSig* is a pointer to a member function pointer with an extra unnecessary level of indirection. Then you can use the arrow operator (not its official name):
(object_to_be_called_on ->* func)(args);
For objects without a pointer (for example, objects on the stack or references to objects), you use the dot-star operator:
MyClass x; (x .* func)(args);
Also, be careful with operator precedence - arrow and dot-star operators have lower priority than function calls, so you need to add extra brackets, as I already did.
source share