繁体   English   中英

私有成员函数,该函数需要指向同一类中私有成员的指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM