zoukankan      html  css  js  c++  java
  • 函数指针的用法

    在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;
    

      

  • 相关阅读:
    用ProFTPD构建FTP服务器
    Js数组里剔除指定的元素(不是指定的位置)
    JS跨域设置和取Cookie
    ajax test
    js下判断 iframe 是否加载完成的完美方法
    使用div模拟出frameset效果
    js中call与apply用法
    phpstorm 快捷键
    JQuery中 数组与字符串(过滤,排序,拆分,合并)
    基于 Apache 在本地配置多个虚拟主机
  • 原文地址:https://www.cnblogs.com/pinking/p/12142318.html
Copyright © 2011-2022 走看看