最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年01月12日 14:57:19   投稿:shichen2014  
這篇文章主要介紹了C++中回調(diào)函數(shù)(CallBack)的用法,較為詳細(xì)的分析了C++中回調(diào)函數(shù)(CallBack)的原理并以實例形式總結(jié)了其具體用法,具有一定參考借鑒價值,需要的朋友可以參考下

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

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

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

這種處理辦法適用于只有一個類實例的情況,因為多個類實例將共享靜態(tài)類成員和靜態(tài)成員函數(shù),這就導(dǎo)致靜態(tài)指針指向最后創(chuàng)建的類實例。為了避免這種情況,可以使用回調(diào)函數(shù)的一個參數(shù)來傳遞this指針,從而實現(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!";} //因為callBackFun默認(rèn)有一個const Test* 的指針 
}; 
 
typedef void (*FPtr)(void); 
void Fun(FPtr ptr) 

    ptr(); 

int main(void) 

    Fun(callBackFun);  
 
    return 0; 
}

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

相關(guān)文章

  • C/C++實現(xiàn)監(jiān)控目錄文件變化

    C/C++實現(xiàn)監(jiān)控目錄文件變化

    ReadDirectoryChangesW是Windows操作系統(tǒng)提供的一個函數(shù),用于監(jiān)視目錄的變化,本文主要為大家介紹了如何使用ReadDirectoryChangesW實現(xiàn)監(jiān)控目錄文件變化,需要的可以參考下
    2023-11-11
  • C/C++開發(fā)中extern的一些使用注意事項

    C/C++開發(fā)中extern的一些使用注意事項

    這篇文章主要為大家介紹了C/C++開發(fā)中extern一些使用注意事項的事例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • C語言函數(shù)超詳細(xì)講解上篇

    C語言函數(shù)超詳細(xì)講解上篇

    函數(shù)是一組一起執(zhí)行一個任務(wù)的語句。每個?C?程序都至少有一個函數(shù),即主函數(shù)?main()?,所有簡單的程序都可以定義其他額外的函數(shù),函數(shù)我們分兩篇來講解,接下來開始第一篇
    2022-04-04
  • C++ throw關(guān)鍵字實現(xiàn)拋出異常和異常規(guī)范

    C++ throw關(guān)鍵字實現(xiàn)拋出異常和異常規(guī)范

    本文主要介紹了C++ throw關(guān)鍵字實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言實例真題講解數(shù)據(jù)結(jié)構(gòu)中單向環(huán)形鏈表

    C語言實例真題講解數(shù)據(jù)結(jié)構(gòu)中單向環(huán)形鏈表

    鏈表可以說是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護(hù)一組數(shù)據(jù)集合時,就可以使用鏈表,這一點和數(shù)組很相似
    2022-04-04
  • C++中sort函數(shù)的基礎(chǔ)入門使用教程

    C++中sort函數(shù)的基礎(chǔ)入門使用教程

    這篇文章主要給大家介紹了關(guān)于C++中sort函數(shù)的基礎(chǔ)入門使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-12-12
  • c語言實現(xiàn)簡易版三子棋(附完整代碼)

    c語言實現(xiàn)簡易版三子棋(附完整代碼)

    大家好,本篇文章主要講的是c語言實現(xiàn)簡易版三子棋(附完整代碼),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Qt使用QCustomPlot的實現(xiàn)示例

    Qt使用QCustomPlot的實現(xiàn)示例

    QCustomPlot是一個基于Qt C++的圖形庫,用于繪制和數(shù)據(jù)可視化,并為實時可視化應(yīng)用程序提供高性能服務(wù),本文主要介紹了Qt使用QCustomPlot的實現(xiàn)示例,感興趣的可以了解一下
    2024-01-01
  • 基于C++寫一個推箱子小游戲

    基于C++寫一個推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了基于C++寫一個推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-09-09
  • C語言實現(xiàn)新生入學(xué)登記系統(tǒng)

    C語言實現(xiàn)新生入學(xué)登記系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)新生入學(xué)登記系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論

华蓥市| 巴马| 容城县| 崇仁县| 深圳市| 旬邑县| 孝昌县| 洛隆县| 琼海市| 建宁县| 驻马店市| 东光县| 恭城| 盖州市| 广灵县| 河北区| 南投县| 措美县| 克什克腾旗| 阜新| 西和县| 山西省| 财经| 和田市| 都江堰市| 郸城县| 兰坪| 永福县| 广灵县| 武夷山市| 正定县| 伊吾县| 罗山县| 中西区| 宜都市| 中宁县| 红桥区| 洛阳市| 奇台县| 东宁县| 米易县|