Private member function that takes a pointer to a private member in the same class

最后都变了- 提交于 2019-12-01 21:24:49

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.

I'm assuming you tried Caller(MyClass::ToBeCalled, "stuff") already, but is there any particular reason you need a function pointer? Also, please post the actual compiler error.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!