C++ 如何调用函数指针数组中的函数?

C++ 如何调用函数指针数组中的函数?,c++,function,class,pointers,member,C++,Function,Class,Pointers,Member,我有一个数组,其中包含指向GameBoard类中函数的函数指针。我如何调用其中一个函数 class myClass { int plusOne(int val) {return val + 1;} int minusOne(int val) {return val - 1;} int keepTheSame(int val) {return val;} int (myClass::*functions[3])(int val) {&myClass::pl

我有一个数组,其中包含指向GameBoard类中函数的函数指针。我如何调用其中一个函数

class myClass {
    int plusOne(int val) {return val + 1;}
    int minusOne(int val) {return val - 1;}
    int keepTheSame(int val) {return val;}

    int (myClass::*functions[3])(int val) {&myClass::plusOne, &myClass::minusOne, &myClass::keepTheSame};

    // Get coordinates of all positions that flip when placing disc at x,y
    vector<pair<int, int>> getFlipDiscs(pair<int, int> moveCoord, int color) {
        int a = (*functions[0])(2); // error: indirection requires pointer operand
    }
};
class-myClass{
int plusOne(int val){return val+1;}
int-minusOne(int-val){return val-1;}
int keepTheSame(int val){return val;}
int(myClass::*函数[3])(int-val){&myClass::plusOne,&myClass::minusOne,&myClass::keepTheSame};
//获取在x,y位置放置光盘时翻转的所有位置的坐标
矢量getFlipDiscs(成对移动坐标,整数颜色){
int a=(*函数[0])(2);//错误:间接寻址需要指针操作数
}
};

我在internet上查找了成员函数指针和函数指针数组,找到了很多信息,但我无法将它们组合到一个有效的解决方案中。

你不觉得太复杂了吗?这个怎么样:

#include <stdio.h>

int plusOne(int val) {return val + 1;}
int minusOne(int val) {return val - 1;}
int keepTheSame(int val) {return val;}

int (*functions[3])(int val) {plusOne, minusOne, keepTheSame};

int main()
{
    int a = (functions[1])(2); // no error
    printf("%d\n", a);
}
#包括
int plusOne(int val){return val+1;}
int-minusOne(int-val){return val-1;}
int keepTheSame(int val){return val;}
int(*函数[3])(int-val){plusOne,minusOne,keepTheSame};
int main()
{
int a=(函数[1])(2);//无错误
printf(“%d\n”,a);
}

你不觉得太复杂了吗?这个怎么样:

#include <stdio.h>

int plusOne(int val) {return val + 1;}
int minusOne(int val) {return val - 1;}
int keepTheSame(int val) {return val;}

int (*functions[3])(int val) {plusOne, minusOne, keepTheSame};

int main()
{
    int a = (functions[1])(2); // no error
    printf("%d\n", a);
}
#包括
int plusOne(int val){return val+1;}
int-minusOne(int-val){return val-1;}
int keepTheSame(int val){return val;}
int(*函数[3])(int-val){plusOne,minusOne,keepTheSame};
int main()
{
int a=(函数[1])(2);//无错误
printf(“%d\n”,a);
}
函数指针实际上是指向成员函数的指针。要调用其中任何一个,需要提供要调用它们的类的对象。我认为这应该奏效:

(this->*(functions[0]))(2);
也就是说,我建议不要追求这个方向!迟早你会想注册其他操作,在
std::function
对象数组中使用会更灵活。

你的函数指针实际上是指向成员函数的指针。要调用其中任何一个,需要提供要调用它们的类的对象。我认为这应该奏效:

(this->*(functions[0]))(2);

也就是说,我建议不要追求这个方向!迟早您会希望注册其他操作,并且在
std::function
对象数组中使用会更灵活。

它会给出错误:“必须调用对非静态成员函数的引用”。请记住我给出的代码在GameBoard类中,如问题中所述。因此,这三个函数都是成员函数。我更新了问题以更好地匹配情况是的,这段代码只按原样工作,不在类中工作。如果函数简单且通用,那么就可以将它们保持在类之外,因为C++不是严格面向对象的。但迪特玛的神奇解决方案似乎奏效了,它给出了一个错误:“必须调用对非静态成员函数的引用”。请记住我给出的代码在GameBoard类中,如问题中所述。因此,这三个函数都是成员函数。我更新了问题以更好地匹配情况是的,这段代码只按原样工作,不在类中工作。如果函数简单且通用,那么就可以将它们保持在类之外,因为C++不是严格面向对象的。但迪特玛的神奇解决方案似乎奏效了。