我有一门课有几种方法。现在,我希望这个类有一个方法指针数组,它可以用类的一个实例来调用。
基本上是这样的
class MyClass
{
public:
MyClass(int aInit);
typedef int (MyClass::*myPtr)(int);
const myPtr ptrArray[2];
const myPtr ptrSingle;
int plus(int b);
int minus(int b);
private:
int a;
};实现如下所示:
MyClass::MyClass(int aInit) :
ptrArray({&MyClass::plus, &MyClass::minus}),
ptrSingle(&MyClass::plus)
{
this->a = aInit;
}
int MyClass::plus(int b)
{
return (this->a + b);
}
int MyClass::minus(int b)
{
return (this->a - b);
}在另一个类中,我有一个使用MyClass的方法,在该方法中,我尝试访问函数指针成员:
MyClass myInstance(10);
MyClass::myPtr function = myInstance.ptrSingle;
int ret1 = function(1);
int ret2 = myInstance.ptrArray[0](1);
int ret3 = myInstance.ptrArray[1](1);这将导致以下错误消息:
error: must use '.*' or '->*' to call pointer-to-member function in 'function (...)', e.g. '(... ->* function) (...)'
int ret1 = function(1);
^
error: must use '.*' or '->*' to call pointer-to-member function in 'myInstance.MyClass::ptrArray[0] (...)', e.g. '(... ->* myInstance.MyClass::ptrArray[0]) (...)'
int ret2 = *(myInstance.ptrArray[0])(1);
^
error: must use '.*' or '->*' to call pointer-to-member function in 'myInstance.MyClass::ptrArray[1] (...)', e.g. '(... ->* myInstance.MyClass::ptrArray[1]) (...)'
int ret3 = myInstance.ptrArray[1](1);
^(this->*temp.set_func)(value);的东西,但是我如何使这个语法适应我的问题呢?myInstance不是这个类的成员,所以我没有this。而且,myInstance不是指针,所以我不明白为什么*应该是必需的。有人能帮我吗?too many initializers for 'int (MyClass::* const [0])(int)'。但是,非int类型的初始化不应该在c++11中实现吗?我在c++11中使用gcc (Gentoo 4.9.3 p1.0,饼-0.6.2) 4.9.3。
发布于 2015-08-23 14:17:28
感谢评论部分的Igor Tandetnik,我现在可以发布对问题1的答复:
MyClass myInstance(10);
MyClass::myPtr function = myInstance.ptrSingle;
MyClass::myPtr functionFromArray = myInstance.ptrArray[1];
int ret1 = (myInstance.*function)(1);
int ret2 = (myInstance.*(myInstance.ptrArray[0]))(1);
int ret3 = (myInstance.*(myInstance.ptrArray[1]))(1);
int ret4 = (myInstance.*functionFromArray)(1);我的错误是假设方法指针直接指向实例的方法。由于带有ret2和3的行看起来很难看,所以我添加了一个如何访问数组的示例。也许这对其他人有用!
https://stackoverflow.com/questions/32166753
复制相似问题