函数指针的用法

函数指针的用法

在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账号...

(0)


相关推荐

  • jar包与war包的区别

    jar包与war包的区别ar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。里面就是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。这是jar的里面的class文件war包:其实就是一个web程序进行打包便于部署的压缩包,里面包含我们web程序需要的一些东西,其中包括web.xml的配

  • 基于socketio实现微信聊天功能[通俗易懂]

    基于socketio实现微信聊天功能

  • common sense security framework

    common sense security framework

  • db2 分区数据库详解

    db2 分区数据库详解本文主要介绍什么是DB2数据库分区,为什么采用数据库分区,并以BalancedWarehouseE7100为例介绍数据库分区管理的基本方法及应用实践。DB2数据库分区是DB2企业版DPF(DataPartitioningFeature)选件提供的,它主要用来为大规模数据处理、高并发数据访问提供支持。DB2数据库分区采用Share-nothing体系结构

  • 2020最新-精选基础算法100题(面试必备)[通俗易懂]

    2020最新-精选基础算法100题(面试必备)[通俗易懂]0x01.概述作为一个程序员,算法能力必不可少,虽然不一定是算法工程师,但是算法还是彰显着个人的编码能力,面试中也经常会被问到,甚至会被要求临场做算法题,所以,还是好好积累吧。个人其实对算法挺有兴趣的,从3月份开始,陆陆续续刷了一些算法题,把一些有意义的记录下来了,也顺便写了一些题解,个人认为,还是挺有收获的。之前写了一篇算法文章的目录,不过后来就忘了实时去更新了,于是现在,想把之前做过的一些有意义的算法题分享出来,刚好整理了100篇比较有意义的。希望对大家有所帮助。0x02.说明关

  • Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)「建议收藏」

    Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)「建议收藏」本文阐述:class文件和代码中的class对象之间的关系;动态代理中InvocationHandler角色的由来;Javassist和ASM框架生成字节码;类加载器

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号