代码之家  ›  专栏  ›  技术社区  ›  JXD

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

  •  0
  • JXD  · 技术社区  · 6 年前

    我有一个数组,其中包含指向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
        }
    };
    

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

    2 回复  |  直到 6 年前
        1
  •  4
  •   Dietmar Kühl    6 年前

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

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

    也就是说,我建议 std::function<Signature> 对象更灵活。

        2
  •  0
  •   Palo Jyotsna Jha    6 年前

    你不是把事情复杂化了吗?这个怎么样:

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