[英]Private member function that takes a pointer to a private member in the same class
我怎样才能做到这一点? (以下代码不起作用,但我希望它能解释这个想法。)
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
。 如果有可能,我想将所有内容封装在班级的私有部分中。 实际上,我大约有50个函数如ToBeCalled
,所以我找不到避免这种情况的方法。
感谢您的任何建议。 :)
您已到达那里。 您缺少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")
,但是是否有任何特定原因需要函数指针? 另外,请发布实际的编译器错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.