欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

C++中回調(diào)函數(shù)(CallBack)的用法分析

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

本文實(shí)例分析了C++中回調(diào)函數(shù)(CallBack)的用法。分享給大家供大家參考。具體分析如下:

如果試圖直接使用C++的成員函數(shù)作為回調(diào)函數(shù)將發(fā)生錯(cuò)誤,甚至編譯就不能通過(guò)。
其錯(cuò)誤是普通的C++成員函數(shù)都隱含了一個(gè)傳遞函數(shù)作為參數(shù),亦即“this”指針,C++通過(guò)傳遞this指針給其成員函數(shù)從而實(shí)現(xiàn)程序函數(shù)可以訪(fǎng)問(wèn)C++的數(shù)據(jù)成員。這也可以理解為什么C++類(lèi)的多個(gè)實(shí)例可以共享成員函數(shù)卻-有不同的數(shù)據(jù)成員。由于this指針的作用,使得將一個(gè)CALL-BACK型的成員函數(shù)作為回調(diào)函數(shù)安裝時(shí)就會(huì)因?yàn)殡[含的this指針使得函數(shù)參數(shù)個(gè)數(shù)不匹配,從而導(dǎo)致回調(diào)函數(shù)安裝失敗。要解決這一問(wèn)題的關(guān)鍵就是不讓this指針起作用,通過(guò)采用以下兩種典型技術(shù)可以解決在C++中使用回調(diào)函數(shù)所遇到的問(wèn)題。這種方法具有通用性,適合于任何C++。
  
1).   不使用成員函數(shù),為了訪(fǎng)問(wèn)類(lèi)的成員變量,可以使用友元操作符(friend),在C++中將該函數(shù)說(shuō)明為類(lèi)的友元即可。

2).   使用靜態(tài)成員函數(shù),靜態(tài)成員函數(shù)不使用this指針作為隱含參數(shù),這樣就可以作為回調(diào)函數(shù)了。靜態(tài)成員函數(shù)具有兩大特點(diǎn):其一,可以在沒(méi)有類(lèi)實(shí)例的情況下使用;其二,只能訪(fǎng)問(wèn)靜態(tài)成員變量和靜態(tài)成員函數(shù),不能訪(fǎng)問(wèn)非靜態(tài)成員變量和非靜態(tài)成員函數(shù)。由于在C++中使用類(lèi)成員函數(shù)作為回調(diào)函數(shù)的目的就是為了訪(fǎng)問(wèn)所有的成員變量和成員函數(shù),如果做不到這一點(diǎn)將不具有實(shí)際意義。解決的辦法也很簡(jiǎn)單,就是使用一個(gè)靜態(tài)類(lèi)指針作為類(lèi)成員,通過(guò)在類(lèi)創(chuàng)建時(shí)初始化該靜態(tài)指針,如pThis=this,然后在回調(diào)函數(shù)中通過(guò)該靜態(tài)指針就可以訪(fǎng)問(wèn)所有成員變量和成員函數(shù)了。

這種處理辦法適用于只有一個(gè)類(lèi)實(shí)例的情況,因?yàn)槎鄠€(gè)類(lèi)實(shí)例將共享靜態(tài)類(lèi)成員和靜態(tài)成員函數(shù),這就導(dǎo)致靜態(tài)指針指向最后創(chuàng)建的類(lèi)實(shí)例。為了避免這種情況,可以使用回調(diào)函數(shù)的一個(gè)參數(shù)來(lái)傳遞this指針,從而實(shí)現(xiàn)數(shù)據(jù)成員共享。這種方法稍稍麻煩,這里就不再贅述。
例子:

復(fù)制代碼 代碼如下:
#include "stdafx.h" 
#include <iostream> 
#include <assert.h> 
using namespace std; 
 
class Test 

public: 
    friend void callBackFun(void){ cout << "CallBack Function!";} //因?yàn)閏allBackFun默認(rèn)有一個(gè)const Test* 的指針 
}; 
 
typedef void (*FPtr)(void); 
void Fun(FPtr ptr) 

    ptr(); 

int main(void) 

    Fun(callBackFun);  
 
    return 0; 
}

希望本文所述對(duì)大家的C++程序設(shè)計(jì)有所幫助。

上一篇:Visual C++程序設(shè)計(jì)中Windows GDI貼圖閃爍的解決方法

欄    目:C語(yǔ)言

下一篇:C++中sprintf使用的方法與printf的區(qū)別分析

本文標(biāo)題:C++中回調(diào)函數(shù)(CallBack)的用法分析

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3175.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有