亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

怎么實現類的成員函數作為回調函數

2020-01-26 15:46:24
字體:
來源:轉載
供稿:網友

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

1). 不使用成員函數,為了訪問類的成員變量,可以使用友元操作符(friend),在C++中將該函數說明為類的友元即可。   

2). 使用靜態成員函數,靜態成員函數不使用this指針作為隱含參數,這樣就可以作為回調函數了。靜態成員函數具有兩大特點:其一,可以在沒有類實例的情況下使用;其二,只能訪問靜態成員變量和靜態成員函數,不能訪問非靜態成員變量和非靜態成員函數。由于在C++中使用類成員函數作為回調函數的目的就是為了訪問所有的成員變量和成員函數,如果做不到這一點將不具有實際意義。解決的辦法也很簡單,就是使用一個靜態類指針作為類成員,通過在類創建時初始化該靜態指針,如pThis=this,然后在回調函數中通過該靜態指針就可以訪問所有成員變量和成員函數了。 這種處理辦法適用于只有一個類實例的情況,因為多個類實例將共享靜態類成員和靜態成員函數,這就導致靜態指針指向最后創建的類實例。為了避免這種情況,可以使用回調函數的一個參數來傳遞this指針,從而實現數據成員共享。這種方法稍稍麻煩,這里就不再贅述。

首先明白什么是回調函數:比如說被調函數void callbackf(int n){}要想作為回調函數的話,callbackf必須作為主調函數的形參出現,如void f(void (*p(int)),int n)形式才行!

例子:

例1:

復制代碼 代碼如下:

#include<iostream>
using namespace std;
class A
{
public:

 friend void callback()  //友元函數作為回調函數 friend方式實現
 {
  cout<<"回調函數開始執行了!"<<endl;
 }
};
void f(void (*p)())
 {
  p();

 }
int main()
{
 void (*p)();
 p=callback;
 f(p);
 return 0;
}


例2:
復制代碼 代碼如下:

#include<iostream>
using namespace std;
class A
{
public:

 static void callback()  //類的成員函數作為回調函數 static方式實現
 {
  cout<<"回調函數開始執行了!"<<endl;
 }
};
void f(void (*p)())
 {
  p();

 }
int main()
{
 void (*p)();
 p=A::callback;
 f(p);
 return 0;
}


還可以把f()函數設為類的成員函數:
復制代碼 代碼如下:

#include<iostream>
using namespace std;
class A
{
public:

 static void callback()  //類的成員函數作為回調函數 static方式實現
 {
  cout<<"回調函數開始執行了!"<<endl;
 }
 void f(void (*p)())
 {
  p();

 }
};

int main()
{
 A a;
 void (*p)();
 p=A::callback;
 a.f(p);
 return 0;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美多人乱p欧美4p久久| 国产激情综合五月久久| 久久在线精品视频| 久久精品国产清自在天天线| 精品国偷自产在线视频| 精品亚洲男同gayvideo网站| 久久97久久97精品免视看| 97国产精品视频| 欧美视频一区二区三区…| 欧美国产日产韩国视频| 日韩国产一区三区| 久久天天躁狠狠躁夜夜躁2014| 91在线观看免费高清完整版在线观看| 久久免费视频在线| 深夜福利日韩在线看| 日韩精品有码在线观看| 欧美成人精品激情在线观看| 日韩经典第一页| 国产综合色香蕉精品| 91精品成人久久| 91精品国产沙发| 欧美激情一级二级| 国产精品成人一区二区| 国产丝袜精品视频| 性欧美xxxx| 久久免费国产精品1| 亚洲天堂男人天堂| 草民午夜欧美限制a级福利片| 亚洲成人在线网| 国产午夜精品麻豆| 69av在线播放| 伊人亚洲福利一区二区三区| 中文字幕亚洲欧美在线| 欧美午夜片欧美片在线观看| 亚洲成色777777女色窝| 欧美巨猛xxxx猛交黑人97人| 国产精品久久久久久久av大片| 欧美日韩激情视频8区| 亚洲性线免费观看视频成熟| 欧美一区三区三区高中清蜜桃| 国产免费一区视频观看免费| 久久国产精品久久久| 亚洲在线www| 97人人爽人人喊人人模波多| 久久综合88中文色鬼| 91影视免费在线观看| 中文字幕自拍vr一区二区三区| 成人在线免费观看视视频| 亚洲精品免费一区二区三区| 欧美大片大片在线播放| 亚洲美女免费精品视频在线观看| 久久久久久久久网站| 国产丝袜一区视频在线观看| 精品毛片三在线观看| 日韩一区二区三区国产| 亚洲精品美女视频| 岛国av一区二区在线在线观看| 亚洲天堂成人在线视频| 国产一区二区三区在线播放免费观看| 成人免费激情视频| 国产精品自在线| 国产一区在线播放| 日韩视频在线一区| 亚洲国产精品久久91精品| 日韩在线视频观看正片免费网站| 欧美激情精品在线| 夜夜狂射影院欧美极品| 亚洲精品一区二区三区婷婷月| 性欧美长视频免费观看不卡| 欧美日韩黄色大片| 亚洲va国产va天堂va久久| 日韩亚洲成人av在线| 97免费在线视频| 一区二区三区美女xx视频| 成人午夜激情免费视频| 亚洲欧美日韩国产中文专区| 性亚洲最疯狂xxxx高清| 欧美一级bbbbb性bbbb喷潮片| 成人高h视频在线| 97国产精品人人爽人人做| 精品国产精品三级精品av网址| 中文字幕视频在线免费欧美日韩综合在线看| 久久亚洲精品小早川怜子66| 亚洲精品乱码久久久久久按摩观| 欧美亚洲免费电影| 亚洲免费视频观看| 国产一区二区三区日韩欧美| 欧美激情亚洲激情| 日韩精品免费观看| 成人在线国产精品| 亚洲欧美国产一本综合首页| 亚洲网在线观看| 国产精品极品美女在线观看免费| 亚洲精品电影在线| 亚洲精品v欧美精品v日韩精品| 国产成人在线一区二区| 日韩欧美成人免费视频| 在线播放精品一区二区三区| 日韩欧美精品中文字幕| 91亚洲人电影| 亚洲人成电影网站色| 日韩中文字幕网| 精品成人69xx.xyz| 深夜福利日韩在线看| 9.1国产丝袜在线观看| 日本老师69xxx| 久久精品国产96久久久香蕉| 国产视频精品一区二区三区| 国产精品∨欧美精品v日韩精品| 欧美香蕉大胸在线视频观看| 色哟哟入口国产精品| 大桥未久av一区二区三区| 国产精品一区二区久久| 日韩a**站在线观看| 日韩av手机在线观看| 欧美乱妇40p| 欧美一级片在线播放| 九九久久久久99精品| 国产一区二区三区在线观看视频| 在线电影av不卡网址| 日韩网站在线观看| 久久久久久久久久久国产| 久久69精品久久久久久国产越南| 欧洲日韩成人av| 久久久www成人免费精品| 国产综合久久久久久| 国产成人在线播放| 中文字幕精品国产| 精品久久久久久久久国产字幕| 国产精品久久久久久久久| 亚洲男人天堂久| 91精品国产综合久久久久久蜜臀| 欧美日韩国产精品专区| 国产在线精品播放| 日韩中文字幕精品视频| 青青草原成人在线视频| 色综合久久久久久中文网| 国产日韩一区在线| 韩国国内大量揄拍精品视频| 日韩电影视频免费| 91色在线视频| 欧美激情网友自拍| 国产亚洲一区二区精品| 国产精品高潮呻吟久久av野狼| 亚洲韩国欧洲国产日产av| 欧美日韩激情美女| 最新国产精品亚洲| 欧美精品激情视频| 欧美午夜激情小视频| 精品国模在线视频| 亚洲色图综合网| 日韩电影网在线| 久久精品99久久香蕉国产色戒| 久久免费成人精品视频| 国产精品亚洲片夜色在线| 亚洲天堂网在线观看| 欧美激情18p| 精品国内自产拍在线观看| 亚洲精品国产精品乱码不99按摩| 91免费视频网站| 91色在线视频| 亚洲乱码av中文一区二区| 色视频www在线播放国产成人| 亚洲精品av在线|