回調(diào)函數(shù)簡介

C++回調(diào)函數(shù)相關(guān)

1. 首先還是由最基本的"Hello World!"程序引入

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;

    return 0;
}

2. 接下來實現(xiàn)一個簡單的函數(shù)調(diào)用輸出"Hello World!"

#include <iostream>

void sayHello(string s)
{
    std::cout << s << std::endl;
}

int main()
{
    sayHello("Hello World!");

    return 0;
}

3. 接下來說明一下有關(guān)于函數(shù)類型這一概念

所謂的函數(shù)的類型,包含了兩個部分(它的申明類型和調(diào)用所需的形參列表),如對我們上文中的sayHello為例,sayHello函數(shù)的類型就為"void (string)"

有了對函數(shù)類型的理解,接著我們就可以申明一個指向函數(shù)的指針,以sayHello函數(shù)為例:

void (*fp) (string); // fp為void (string)類型的指針,還未指向相應(yīng)的對象
fp = sayHello;

通過調(diào)用fp完成輸出"Hello World!"代碼如下:

#include <iostream>

void sayHello(string s)
{
    std::cout << s << std::endl;
}

int main()
{
    //void (*fp) (string);  // 聲明一個函數(shù)指針
    fp = sayHello;
    auto fps = sayHello;    // c++11新用法

    fp("Hello ");
    fps("World!");

    return 0;
}

上述代碼還是補(bǔ)充了C++11的新特性auto,有興趣可以自己去了解一下

4. 下面就可以很容易的理解回調(diào)函數(shù)的概念了

所謂回調(diào)函數(shù),簡單的說就是對于一個現(xiàn)有系統(tǒng)所提供的接口,用戶可以自行定義一個函數(shù)作為其形參,以函數(shù)指針的形式傳入,而具體在合適使用該自定義函數(shù)由系統(tǒng)接口內(nèi)部自行決定

再形象一點地說,你去飯店預(yù)訂餐桌,留下手機(jī)號,你的手機(jī)號就是所謂的回調(diào)函數(shù),有餐桌則通過手機(jī)號與你聯(lián)系,這就是調(diào)用回調(diào)函數(shù)

下面給出簡單的利用回調(diào)函數(shù)"Hello World"

#include <iostream>

void sayHello(string s)
{
    std::cout << s << std::endl;
}

void callback(void (*callfunc)(string), string s)
{
    callfunc(s);
}

int main()
{
    auto fps = sayHello;      // c++11新用法

    callback(fps, "this is callback func!");

    return 0;
}

這里需要注意的的是,在sayHello函數(shù)中是有參數(shù)string s需要傳入的,callback函數(shù)的第一個參數(shù)只是一個指向sayHello函數(shù)內(nèi)存地址的函數(shù)指針,其并不帶參數(shù),如果callback沒有第二個參數(shù)string s的話,則無法進(jìn)行調(diào)用。

PS:慢慢開始養(yǎng)成寫博客的習(xí)慣吧,不然越來越懶了233333

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容