在C++编程的时候,有时候我在考虑,如果把一个函数能够当作一个变量,被调用、传递就会方便很多,之前学习了lambda表达式,用lamda表达式会比较方便。下面可以介绍一种新的方法,函数指针。
函数指针用例
int add(int a,int b){ return a+b; } void Widget::on_pushButton_clicked() { int (*pfunc)(int a,int b); pfunc = add; qDebug()<<pfunc(1,2)<<endl; }
如上,通过一个简单了例子,可以看到函数指针的声明以及赋值、应用的过程。可以将例子变得复杂一点:
int add(int a,int b){ return a+b; } void Widget::on_pushButton_clicked() { QMap<QString,int(*)(int,int)> toTest; toTest["test"] = add; qDebug()<<toTest["test"](1,2)<<endl; }
如果想要add函数为类中的非静态成员函数,代码可以写成:
widget.h
int add(int a,int b); QMap<QString,int(Widget::*)(int,int)> toTest;
widget.cpp
int Widget::add(int a,int b){ return a+b; } void Widget::on_pushButton_clicked() { toTest["test"] = add; qDebug()<<(this->*toTest["test"])(1,2)<<endl; }
如果add函数声明为静态成员函数,就方便多了。
widget.h
static int add(int a,int b);
widget.cpp
int Widget::add(int a,int b){ return a+b; } void Widget::on_pushButton_clicked() { QMap<QString,int(*)(int,int)> toTest; toTest["test"] = add;//用&add也行 qDebug()<<toTest["test"](1,2)<<endl; }
当我们把函数名作为一个右值使用时,此函数名会自动地转化为指针,当然,也可用取地址符(两者是等价的):
toTest["test"] = add; toTest["test"] = &add;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119437.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...