【问题标题】:How to call a function that is in an array of function pointers?如何调用函数指针数组中的函数?
【发布时间】:2019-01-25 09:51:05
【问题描述】:

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

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

【问题讨论】:

    标签: c++ function class pointers member


    【解决方案1】:

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

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

    也就是说,我建议不要去追求这个方向!迟早你会想要注册其他操作并使用std::function&lt;Signature&gt; 对象数组更灵活。

    【讨论】:

      【解决方案2】:

      你不会太复杂了吧?这个怎么样:

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

      【讨论】:

      • 它给出了错误:'必须调用对非静态成员函数的引用'。请记住,我给出的代码在 GameBoard 类中,如问题中所述。因此这三个函数都是成员函数。
      • 我更新了问题以更好地匹配情况
      • 是的,这段代码只能按原样工作,不能在类中工作。也许如果函数足够简单和通用,可以将它们保留在类之外,因为 C++ 不是严格面向对象的。但 Dietmar 的神奇解决方案似乎奏效了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      相关资源
      最近更新 更多