如何调用函数指针数组中的函数?
How to call a function that is in an array of function pointers?
我有一个数组,其中包含指向我的 GameBoard class 中的函数的函数指针。我如何调用其中一个函数?
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 上查找了成员函数指针和函数指针数组并找到了很多信息,但我无法将它们组合成一个有效的解决方案。
你是不是把事情想得太复杂了?这个怎么样:
#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);
}
你的函数指针实际上是指向成员函数的指针。要调用其中任何一个,您需要提供要调用它们的 class 的对象。我认为这应该有效:
(this->*(functions[0]))(2);
也就是说,我建议不要追求这个方向!迟早你会想要注册其他操作,使用 std::function<Signature>
对象数组会更灵活。
我有一个数组,其中包含指向我的 GameBoard class 中的函数的函数指针。我如何调用其中一个函数?
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 上查找了成员函数指针和函数指针数组并找到了很多信息,但我无法将它们组合成一个有效的解决方案。
你是不是把事情想得太复杂了?这个怎么样:
#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);
}
你的函数指针实际上是指向成员函数的指针。要调用其中任何一个,您需要提供要调用它们的 class 的对象。我认为这应该有效:
(this->*(functions[0]))(2);
也就是说,我建议不要追求这个方向!迟早你会想要注册其他操作,使用 std::function<Signature>
对象数组会更灵活。