函數指針的用法


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM