私有成员函数,它接受一个指向私有成员在同一类
-
19-09-2019 - |
题
我怎样才能做到这一点? (下面的代码不工作,但我希望它解释了这个想法。)
class MyClass
{
....
private:
int ToBeCalled(int a, char* b);
typedef (MyClass::*FuncSig)(int a, char* b);
int Caller(FuncSig *func, char* some_string);
}
我想呼叫主叫方在某些方面,如:
Caller(ToBeCalled, "stuff")
和具有任何参数感觉需要传递Caller
呼叫ToBeCalled
。如果可能的话我希望把一切都封装在我班上的私有部分。在现实中,我有一个像ToBeCalled
约50的功能,所以我看不到的方式来避免这种情况。
感谢您的任何建议。 :)
解决方案
您是最那里的方式。你错过了从typedef的返回类型,它应该是
typedef int (MyClass::*FuncSig)(int, char*);
现在,你只需要正确的使用它:
int Caller(FuncSig func, int a, char* some_string)
{
return (this->*func)(a, some_string);
}
您想通过围绕纯FuncSig
实例,而不是FuncSig*
- 一个FuncSig*
是一个指向一个指针指向一个成员功能,具有额外的间接不必要的水平。然后,使用箭头星级操作员(而不是它的正式名称)来调用它:
(object_to_be_called_on ->* func)(args);
有关非指针对象(例如在栈上的对象,或者引用的对象),可以使用点星操作者:
MyClass x;
(x .* func)(args);
此外,要警惕运算符优先级 - 箭星和点星运算符比函数调用的优先级低,所以你需要把额外的括号,因为我在上面所做
。其他提示
我假设你试过Caller(MyClass::ToBeCalled, "stuff")
了,但有没有你需要一个函数指针什么特别的原因?另外,请不要实际编译错误。
不隶属于 StackOverflow