C++ 如何调用函数指针数组中的函数?
我有一个数组,其中包含指向GameBoard类中函数的函数指针。我如何调用其中一个函数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
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++不是严格面向对象的。但迪特玛的神奇解决方案似乎奏效了。