中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

蘭州網(wǎng)站排名優(yōu)化公司惠城網(wǎng)站設(shè)計(jì)

蘭州網(wǎng)站排名優(yōu)化公司,惠城網(wǎng)站設(shè)計(jì),繁峙做網(wǎng)站建設(shè),加快公司網(wǎng)站建設(shè)回調(diào)函數(shù) 當(dāng)程序跑起來時(shí),一般情況下,應(yīng)用程序會(huì)時(shí)常通過API調(diào)用庫中實(shí)現(xiàn)準(zhǔn)備好的函數(shù)。但是有些庫函數(shù)需要先傳一個(gè)函數(shù)給它,好在合適時(shí)調(diào)用。傳入且被調(diào)用的函數(shù)叫做回調(diào)函數(shù)。 基礎(chǔ)知識(shí) 所謂回調(diào),就是模塊A要通過模塊B的某個(gè)函…

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


當(dāng)程序跑起來時(shí),一般情況下,應(yīng)用程序會(huì)時(shí)常通過API調(diào)用庫中實(shí)現(xiàn)準(zhǔn)備好的函數(shù)。但是有些庫函數(shù)需要先傳一個(gè)函數(shù)給它,好在合適時(shí)調(diào)用。傳入且被調(diào)用的函數(shù)叫做回調(diào)函數(shù)。

基礎(chǔ)知識(shí)

所謂回調(diào),就是模塊A要通過模塊B的某個(gè)函數(shù)b()完成一定功能,但是函數(shù)b無法完成所有的功能,需要反過來調(diào)用模塊A中的某個(gè)函數(shù)a()來完成,這個(gè)a()就是回調(diào)函數(shù)

  1. 約定接口規(guī)范

    在模塊B必須約定接口規(guī)范,也就是定義回調(diào)函數(shù)a()的函數(shù)原型

    這里回調(diào)函數(shù)原型的定義最好遵循

    typedef void(*SCT_XXX)(LPVOID Ip,const CBParamStruct& cbNode);
    
    • SCT_XXX是指向函數(shù)的指針類型(原文說是回調(diào)函數(shù)的名稱)
    • IP是回調(diào)上下文
    • CBParamStruct是回調(diào)參數(shù),一般由于要回調(diào)的參數(shù)不止一個(gè),所以定義一個(gè)結(jié)構(gòu)體更加方便
  2. 回調(diào)函數(shù)的注冊

    為了讓模塊B知道自己將要用的回調(diào)函數(shù),必須有一個(gè)函數(shù)或者語句進(jìn)行注冊回調(diào)函數(shù)

    注冊回調(diào)函數(shù)的定義遵循

    void RFC_XXX(SCT_XXX pnf,LPVOID Ip);
    
    • RFC_XXX是注冊函數(shù)名
    • pfn是SCT_XXX類型的指針變量指向回調(diào)函數(shù)
    • Ip是回調(diào)上下文
    • 一般在A模塊初始化完B模塊后調(diào)用,將A模塊中定義的回調(diào)函數(shù)地址賦值給pfn,Ip賦值為this
  3. 在A模塊中要進(jìn)行的事情

    首先將回調(diào)函數(shù)聲明成靜態(tài)的

    static void CF_XXX(LPVOID Ip,const CBParamStruct& cbNode);
    

    函數(shù)的參數(shù)必須與B模塊中回調(diào)函數(shù)原型參數(shù)保持一致

回調(diào)函數(shù)的實(shí)現(xiàn)

void basketball()//函數(shù)1
{printf("選擇籃球");
}
void football()//函數(shù)2
{printf("選擇足球");
}
void selectball(void (* ball)())//函數(shù)3
{printf("選擇什么球?");ball();
}
int main(void)
{selectball(basketball);selectball(football);return 0;
}

函數(shù)1和2都屬于模塊A,函數(shù)3屬于模塊B,主函數(shù)在調(diào)用模塊B中的函數(shù)時(shí),模塊B得不到答案,故傳遞指針給函數(shù)3 ,得到正確答案

進(jìn)階回調(diào)


C語言回調(diào)實(shí)例

//callbackText.c
//1.定義函數(shù)onHeight(回調(diào)函數(shù))
//@onHeight 函數(shù)名
//@height 參數(shù)
//@context 上下文
void onHeight(double height,void* context)
{sprint("current height is %lf",height);
}
//2.定義onHeight函數(shù)的原型
//@CallbackFun 指向函數(shù)的指針類型
//@height 回調(diào)參數(shù),當(dāng)有多個(gè)參數(shù)時(shí),可以定義一個(gè)結(jié)構(gòu)體
//@context 回調(diào)上下文,在c中一般傳入nullptr,在c++中可以傳入對象指針
typedef void (*CallbackFun)(double height,void* context);
//3.定義注冊回調(diào)函數(shù)
//@registHeightCallback 注冊函數(shù)名
//@callback 回調(diào)函數(shù)原型
//@context 回調(diào)上下文
void registHeightCallback(CallbackFun callback,void* context)
{double h=100;callback(h,nullptr);
}
//4.main函數(shù)
void main()
{registHeightCallback(onHeight,nullptr);
}

很多時(shí)候,注冊的時(shí)候并不調(diào)用回調(diào)函數(shù),而是在其他函數(shù)中調(diào)用,那我們可以定義一個(gè)CallbackFun全局指針變量,在注冊的時(shí)候?qū)⒑瘮?shù)指針賦給它,在調(diào)用的時(shí)候調(diào)用它

//定義全局指針變量
CallbackFun* m_pCallback;
//定義注冊回調(diào)函數(shù)
void registHeightCallback(CallbackFun callback,void* context)
{m_pCallback = callback;
}
//定義調(diào)用函數(shù)
void printHeightFun(double height)
{m_pCallback(height,nullptr);
}

C++回調(diào)函數(shù)


C++回調(diào)函數(shù)擴(kuò)展自C,與C略有不同的是,C++可以使用全局函數(shù)和靜態(tài)函數(shù)作為回調(diào)函數(shù)??紤]到全局函數(shù)會(huì)破壞封裝性,所以一般都用靜態(tài)成員函數(shù)。故除了理解函數(shù)指針,還要理解靜態(tài)成員函數(shù),具體一點(diǎn)是在靜態(tài)函數(shù)成員中訪問非靜態(tài)成員函數(shù)的方法,因?yàn)槲覀兒芸赡苄枰@取靜態(tài)成員函數(shù)中的數(shù)據(jù)。

使用場景描述:使用他人提供的SDK,如:

//CallbackFun類型
//@CallbackFun 指向函數(shù)的指針類型
//@height      回調(diào)參數(shù),當(dāng)有多個(gè)參數(shù)時(shí),可以定義一個(gè)結(jié)構(gòu)體
//@contex      回調(diào)上下文,在C中一般傳入nullptr,在C++中可傳入對象指針
typedef void (*CallbackFun)(double height, void* contex);//注冊回調(diào)函數(shù)接口
//@registHeightCallback 注冊函數(shù)名
//@callback             回調(diào)函數(shù)原型
//@contex               回調(diào)上下文
void registHeightCallback(CallbackFun callback, void* contex)

首先定義一個(gè)靜態(tài)成員函數(shù)并注冊

//sensorTest.cpp
//接收數(shù)據(jù)類class Sensor
class Sensor{
public:Sensor(){}~Sensor(){}//定義回調(diào)函數(shù)onHeightstatic void onHeight(double height, void* contex){cout << "current height is  " << height << endl;}//定義注冊回調(diào)函數(shù)void registCallback(){registHeightCallback(onHeight, this);}
};//main 函數(shù)
void main()
{Sensor sens;sens.registCallback();
}

靜態(tài)成員函數(shù)訪問非靜態(tài)成員函數(shù)的方法

在靜態(tài)成員函數(shù)中只能出現(xiàn)靜態(tài)變量和靜態(tài)函數(shù)的,但是有些時(shí)候需要訪問非靜態(tài)成員函數(shù)或者變量

//接收數(shù)據(jù)類class Sensor
class Sensor{
public:Sensor(){}~Sensor(){}//定義回調(diào)函數(shù)onHeightstatic void onHeight(double height,void* context){//cout << "current height is "<< height << endl;Sensor* sen = (Sensor*)context;if(sen)//判斷sen是否有效sen->getHeight(height);}//定義注冊回調(diào)函數(shù)void registCallback(){registHeightCallback(ontHeight,this);}//新增成員函數(shù)void getHeight(double height){cout << "current height is "<< height <<endl;}
};

回調(diào)對象


http://m.risenshineclean.com/news/66065.html

相關(guān)文章:

  • 深圳公司網(wǎng)站制作互聯(lián)網(wǎng)營銷的方式有哪些
  • 網(wǎng)頁設(shè)計(jì)網(wǎng)站免登陸企業(yè)培訓(xùn)體系
  • 一個(gè)網(wǎng)址建多個(gè)網(wǎng)站seo是什么意思?
  • 網(wǎng)站方案投放廣告
  • wordpress related posts福州整站優(yōu)化
  • 做的好的家裝網(wǎng)站網(wǎng)站頁面設(shè)計(jì)模板
  • 合肥網(wǎng)站設(shè)計(jì)建東莞百度seo推廣公司
  • 織夢教育咨詢企業(yè)網(wǎng)站模板sem什么意思
  • 代理注冊公司有什么風(fēng)險(xiǎn)合肥seo排名優(yōu)化公司
  • 網(wǎng)站建設(shè)公司yu泰安網(wǎng)站推廣優(yōu)化
  • 網(wǎng)站主機(jī)一個(gè)g西安網(wǎng)絡(luò)推廣公司
  • 自建導(dǎo)航站wordpress百度網(wǎng)盤資源鏈接入口
  • 網(wǎng)站改版提案百度指數(shù)與百度搜索量
  • 域名備案需要哪些資料東莞網(wǎng)站建設(shè)優(yōu)化推廣
  • 微信上的網(wǎng)站怎么做百度seo搜索引擎優(yōu)化培訓(xùn)
  • 怎么用ftp工具上傳網(wǎng)站源碼武漢seo首頁優(yōu)化公司
  • vs2015網(wǎng)站開發(fā)基礎(chǔ)樣式百度客服
  • 域名 網(wǎng)站名稱手機(jī)系統(tǒng)流暢神器
  • 05網(wǎng)答案深圳關(guān)鍵詞優(yōu)化平臺(tái)
  • 開發(fā)區(qū)網(wǎng)站建設(shè)游戲代理是怎么賺錢的如何代理游戲
  • 訊杰網(wǎng)站建設(shè)南寧seo教程
  • 做網(wǎng)站余姚做運(yùn)營需要具備什么能力
  • 英文 日文網(wǎng)站建設(shè)申請seo賺錢嗎
  • 那個(gè)相親網(wǎng)站做的比較好網(wǎng)站流量分析工具
  • 開發(fā)一個(gè)官方網(wǎng)站要多少錢免費(fèi)的關(guān)鍵詞優(yōu)化軟件
  • 自己做代練網(wǎng)站百度關(guān)鍵詞廣告怎么收費(fèi)
  • 網(wǎng)站發(fā)展方向百度指數(shù)大數(shù)據(jù)分享平臺(tái)
  • 網(wǎng)站swf怎么做seo搜索引擎優(yōu)化原理
  • vs做網(wǎng)站連數(shù)據(jù)庫優(yōu)化推廣網(wǎng)站怎么做最好
  • 網(wǎng)站規(guī)劃與設(shè)計(jì)范文太原網(wǎng)站排名推廣