How can I do this? (The following code does NOT work, but I hope it explains the idea.)
class MyClass
{
....
private:
int ToBeCalled(int a, char*
You're most of the way there. You're missing the return type from the typedef, it should be
typedef int (MyClass::*FuncSig)(int, char*);
Now, you just need to use it properly:
int Caller(FuncSig func, int a, char* some_string)
{
return (this->*func)(a, some_string);
}
You want to pass around plain FuncSig
instances, not FuncSig*
-- a FuncSig*
is a pointer to a pointer to a member function, with an extra unnecessary level of indirection. You then use the arrow-star operator (not its official name) to call it:
(object_to_be_called_on ->* func)(args);
For non-pointer objects (e.g. objects on the stack, or references to objects), you use the dot-star operator:
MyClass x;
(x .* func)(args);
Also, be wary of operator precedence -- the arrow-star and dot-star operators have lower precedence than function calls, so you need to put in the extra parentheses as I have done above.