如何调用位于函数指针数组中的函数?

时间:2018-08-18 17:03:44

标签: 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::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
    }
};

我在互联网上查找了成员函数指针和函数指针数组,发现了很多信息,但是我无法将它们结合到一个可行的解决方案中。

2 个答案:

答案 0 :(得分:4)

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

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

也就是说,我建议遵循这个方向!迟早您将要注册其他操作,并且使用std::function<Signature>对象数组会更灵活。

答案 1 :(得分:0)

难道不是太复杂了吗?怎么样?

#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);
}