接上文例子,将其改成函数指针数组
class Widget:public QWidget
{
....
public :
int add(int x,int y);
int mul(int x,int y);
int (Widget::*func_p[2])(int x,int y);//定义函数指针数组
....
}
Widget::Widget(QWidget *patent)
{
...
func_p[0] = &Widget::add;//指向add函数
func_p[1] = &Widget::mul;//指向mul函数
qDebug()<<(this->*func_p[0])(1,2);//调用函数指针数组中元素0所指向的函数
qDebug()<<(this->*func_p[1])(1,2);//调用函数指针数组中元素1所指向的函数
...
}
int Widget::add(int x,int y)
{
return x + y;
}
int Widget::mul(int x,int y)
{
return x * y;
}
也可以用typedef来定义
class Widget;
typedef int (Widget::FuncType)(int x, int y);
class Widget:public QWidget
{
....
public :
int add(int x,int y);
int mul(int x,int y);
private:
Ui::Widget *ui;
FuncType func_p[2];//定义函数指针数组
....
}
Widget::Widget(QWidget *patent)
{
...
func_p[0] = &Widget::add;
func_p[1] = &Widget::mul;
qDebug()<<(this->*func_p[0])(1,2);
qDebug()<<(this->*func_p[1])(1,2);
...
}