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

首頁 > 編程 > C++ > 正文

C++中關(guān)于委派(Delegates)的實(shí)現(xiàn)示例

2020-05-23 14:18:16
字體:
供稿:網(wǎng)友

這篇文章主要介紹了C++中關(guān)于委派(Delegates)的實(shí)現(xiàn)示例,針對(duì)C++11的一些新特性進(jìn)行講解,需要的朋友可以參考下

介紹

在 C++ 中通過一個(gè)全局函數(shù)來綁定到對(duì)象的成員函數(shù)是很有用的,這個(gè)特性也存在于其他語言中,例如 C#的委派。在 C++ 中相當(dāng)于成員函數(shù)指針,但是 并沒有提供相應(yīng)的特性。在這篇文章中,我想提出一個(gè)簡(jiǎn)單的 C++ 委派的實(shí)現(xiàn),是用 C++ 成員函數(shù)指針和 C++11 的可變模板(variadic templates),目前這套實(shí)現(xiàn)方法僅支持 GNU C++ 4.7.0,在 Windows 下可使用 MinGW。

背景

在我的方法中獎(jiǎng)提供一個(gè)create_delegate函數(shù),可通過下面兩種方法來調(diào)用:

 

 
  1. create_delegate(&object, &member_function) 
  2. create_delegate(&function

第一種方法創(chuàng)建一個(gè)對(duì)象并提供一個(gè)operator()成員函數(shù),第二個(gè)方法生成一個(gè)函數(shù)指針,兩種方法都兼容 type function<...>.

示例程序

首先我們定義一個(gè)包含多個(gè)方法的類:

 

 
  1. class A 
  2. int i; 
  3. public:  
  4. A(int k):i(k) {} 
  5.  
  6. auto get()const ->int { return i;}  
  7. auto set(int v)->void { i = v;} 
  8.  
  9. auto inc(int g)->int& { i+=g; return i;} 
  10. auto incp(int& g)->int& { g+=i; return g;} 
  11.  
  12. auto f5 (int a1, int a2, int a3, int a4, int a5)const ->int 
  13. return i+a1+a2+a3+a4+a5; 
  14.  
  15. auto set_sum4(int &k, int a1, int a2, int a3, int a4)->void 
  16. i+=a1+a2+a3+a4; 
  17. k = i; 
  18.  
  19. auto f8 (int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) const ->int 
  20. return i+a1+a2+a3+a4+a5+a6+a7+a8; 
  21. }  
  22.  
  23. static auto sqr(double x)->double { return x*x; } 
  24. }; 

請(qǐng)注意你并不需要一定使用 C++ 的 auto 函數(shù)語法,你也可以使用傳統(tǒng)的方法,然后我們使用下面方法創(chuàng)建一個(gè)類:

 

 
  1. A a(11); 

接下來我們創(chuàng)建委派:

 

 
  1. auto set1 = create_delegate(&a,&A::set); 
  2. auto inc = create_delegate(&a,&A::inc); 
  3. std::function<int(int&)> incp = create_delegate(&a,&A::incp); 
  4. auto af5 = create_delegate(&a,&A::f5); 
  5. auto set_sum4= create_delegate(&a,&A::set_sum4); 
  6. auto af8 = create_delegate(&a,&A::f8); 
  7. auto sqr = create_delegate(&A::sqr); // static function </int(int&)> 
  8.  
  9.  
  10. set1(25); 
  11. int x = 5; 
  12. int k = inc(x); 
  13. k = incp(x); 
  14. std::cout << "a.get():" << a.get() << std::endl; 
  15. std::cout << "k: " << k << std::endl; 
  16. std::cout << "x: " << x << std::endl; 
  17. std::cout << "af5(1,2,3,4,5): " << af5(1,2,3,4,5) << std::endl; 
  18.  
  19. set_sum4(x,1,2,3,20); 
  20. std::cout << "after set_sum4(x,1,2,3,20)" << std::endl; 
  21. std::cout << "a.get(): " << a.get() << std::endl; 
  22. std::cout << "x: " << x << std::endl; 
  23. std::cout << "af8(1,2,3,4,5,6,7,8): " << af8(1,2,3,4,5,6,7,8) << std::endl; 
  24. std::cout << "sqr(2.1): " << sqr(2.1) << std::endl; 

執(zhí)行上述程序的打印結(jié)果如下:

 

 
  1. a.get():30 
  2. k: 35 
  3. x: 35 
  4. af5(1,2,3,4,5): 45 
  5. after set_sum4(x,1,2,3,20) 
  6. a.get(): 56 
  7. x: 56 
  8. af8(1,2,3,4,5,6,7,8): 92 
  9. sqr(2.1): 4.41 

關(guān)鍵點(diǎn)

對(duì)于一個(gè)不是 volatile 和 const 的簡(jiǎn)單函數(shù)而言,實(shí)現(xiàn)是非常簡(jiǎn)單的,我們只需要?jiǎng)?chuàng)建一個(gè)類保存兩個(gè)指針,一個(gè)是對(duì)象,另外一個(gè)是成員函數(shù):

 

 
  1. template <class T, class R, class ... P> 
  2. struct _mem_delegate 
  3. T* m_t; 
  4. R (T::*m_f)(P ...); 
  5. _mem_delegate(T* t, R (T::*f)(P ...) ):m_t(t),m_f(f) {} 
  6. R operator()(P ... p) 
  7. return (m_t->*m_f)(p ...); 
  8. }; 

可變模板 variadic template 允許定義任意個(gè)數(shù)和類型參數(shù)的operator()函數(shù),而create_function 實(shí)現(xiàn)只需簡(jiǎn)單返回該類的對(duì)象:

 

 
  1. template <class T, class R, class ... P> 
  2. _mem_delegate<T,R,P ...> create_delegate(T* t, R (T::*f)(P ...)) 
  3. _mem_delegate<T,R,P ...> d(t,f); 
  4. return d; 

實(shí)際中,我們需要另外的三個(gè)實(shí)現(xiàn)用于覆蓋 const、volatile 和 const volatile 三種成員函數(shù),這也是為什么傳統(tǒng)使用 #define 宏很便捷的原因,讓你無需重寫代碼段,下面是完整的實(shí)現(xiàn):

 

 
  1. template <class F> 
  2. F* create_delegate(F* f) 
  3. return f; 
  4. #define _MEM_DELEGATES(_Q,_NAME)/ 
  5. template <class T, class R, class ... P>/ 
  6. struct _mem_delegate ## _NAME/ 
  7. {/ 
  8. T* m_t;/ 
  9. R (T::*m_f)(P ...) _Q;/ 
  10. _mem_delegate ## _NAME(T* t, R (T::*f)(P ...) _Q):m_t(t),m_f(f) {}/ 
  11. R operator()(P ... p) _Q/ 
  12. {/ 
  13. return (m_t->*m_f)(p ...);/ 
  14. }/ 
  15. };/ 
  16. template <class T, class R, class ... P>/ 
  17. _mem_delegate ## _NAME<T,R,P ...> create_delegate(T* t, R (T::*f)(P ...) _Q)/ 
  18. {/ 
  19. _mem_delegate ##_NAME<T,R,P ...> d(t,f);/ 
  20. return d;/ 
  21.  
  22. _MEM_DELEGATES(,Z) 
  23. _MEM_DELEGATES(const,X) 
  24. _MEM_DELEGATES(volatile,Y) 
  25. _MEM_DELEGATES(const volatile,W) 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产freexxxx性播放麻豆| 免费久久99精品国产自| 日本在线视频www色| 国产日韩综合一区二区性色av| bt欧美亚洲午夜电影天堂| av在线播放免费| 日韩欧美综合在线视频| 亚洲成人二区| 日韩视频欧美视频| av亚洲精华国产精华精华| av片在线观看网站| 亚洲欧美日韩不卡| 欧美r级电影| 日本成人a视频| 在线观看成人毛片| 伊人久久大香线蕉av超碰| 国内福利写真片视频在线| 久久久国产精品一区二区中文| 欧美激情va永久在线播放| 日本成人动漫在线观看| 欧美日本国产精品| 国产精品老女人精品视频| 国产精品夜夜夜爽张柏芝| 国产精品v欧美精品v日本精品动漫| 精品蜜桃在线看| 色在线视频免费| 日韩在线视频第一页| 美女被久久久| 96pao国产成视频永久免费| 欧美女王vk| 欧美最顶级丰满的aⅴ艳星| 亚洲av成人片无码| 亚洲一区在线| 久久成人18免费网站| 麻豆视频在线播放| 欧美调教视频| 粉嫩高清一区二区三区精品视频| 偷拍欧美精品| 肉丝美足丝袜一区二区三区四| 亚洲www色| 野外做受又硬又粗又大视频√| 欧洲美女女同性互添| 久久久久久久综合狠狠综合| 国产玖玖精品视频| 粉嫩一区二区三区性色av| 麻豆一区在线观看| 1769免费视频在线观看| 久久精品最新免费国产成人| 亚洲国产欧美不卡在线观看| 亚洲天堂视频在线观看免费| 亚洲国产视频网站| 亚洲欧美中文日韩在线| 97影院理论午夜| 欧美另类视频在线| 亚洲精品狠狠操| 色噜噜日韩精品欧美一区二区| 亚洲va在线va天堂| 操操操com| 免费看欧美女人艹b| 捆绑紧缚一区二区三区视频| 99精品久久久| 欧美激情小视频| 天堂精品久久久久| 国产午夜精品全部视频在线播放| 亚洲欧美一区二区三区在线播放| 1区2区3区国产精品| 亚洲综合av影视| 亚洲片国产一区一级在线观看| 欧美午夜精品久久久| 91看片一区| 久久久久久免费网| 成人在线观看一区| **网站欧美大片在线观看| 一级片在线观看视频| 久久精品黄色| 日韩av自拍偷拍| 蜜乳av另类精品一区二区| 欧美成人激情视频| 国产精品久久久久久久妇| 色综合视频一区二区三区44| 中文字幕一区二区三区四区五区人| 欧美激情综合色| 国产精品第九页| 视频小说一区二区| 国产精品日日夜夜| 成人手机在线| 久久精品一区二区三区av| 一二三四视频社区在线| 欧美日韩另类一区| 久久成人福利视频| 欧美美女15p| 日韩欧美一区二区三区免费看| 韩国三级日本三级少妇99| 大地资源网在线观看免费官网| 老司机亚洲精品| 成在在线免费视频| 免费观看黄网站| aaa在线观看| 五月天丁香视频| 欧美三级视频| 97成人在线视频| 亚洲成人资源| 亚洲三区在线播放| 国产亚洲欧美日韩精品一区二区三区| 999国产精品永久免费视频app| 男人天堂综合网| 国产成人美女视频| 国产又粗又猛视频| xxxxx欧美| 国产成人亚洲欧美电影| 中国字幕a在线看韩国电影| 国产一级免费片| 亚洲午夜剧场| 久久久在线视频| 日本aⅴ在线观看| 3d动漫精品啪啪一区二区竹菊| 亚洲精品mv在线观看| 国产成人无码a区在线观看视频| 成人手机在线| av电影不卡在线观看| 97国产精品视频人人做人人爱| 九九热在线观看视频| 亚洲色图视频免费播放| 性猛交富婆╳xxx乱大交一| 久久久蜜桃精品| 色先锋aa成人| 97国产精品免费视频| 成人在线国产视频| 波多野结衣a v在线| 成人片黄网站色大片免费毛片| 久久视频在线免费观看| 久久99精品国产91久久来源| 国产一区二区三区四| 亚洲成年人电影| 国产欧美日韩综合一区在线播放| 免费观看中文字幕| 日韩一区二区三区四区在线| 精品嫩草影院久久| 高潮一区二区三区| 日本特级黄色片| 国产精品夜夜爽| 中文字幕超清在线免费观看| 亚洲无人区一区| 久久久久亚洲av无码网站| 日本中文字幕一区二区有码在线| 麻豆一区二区三区在线观看| 男女午夜刺激视频| 日韩福利视频| 国产最顶级的黄色片在线免费观看| 免费视频91| 国产精品中文字幕日韩精品| 欧美亚洲国产精品久久| 日韩www.| 国产精品老熟女视频一区二区| 免费欧美日韩国产三级电影| 国产最新精品精品你懂的| 国产精品成人av在线| 日本三级中文字幕在线观看| 亚洲无人区一区| av线上观看| 青娱乐精品在线| 国产精选一区二区| 男人天堂欧美日韩| 新片速递亚洲合集欧美合集| 亚洲一区二区三区四区的| 欧美色欧美亚洲高清在线视频| 蜜桃视频在线免费| 亚洲精品黑牛一区二区三区| 欧美一级欧美一级在线播放| 懂色av粉嫩av蜜臀av一区二区三区| 日韩成人激情| 影音先锋一区| 亚洲蜜桃精久久久久久久久久久久| 国产精久久一区二区三区| 8090成年在线看片午夜| 国产精品嫩草影院一区二区| 经典三级在线| 午夜在线视频免费观看| 国产aaa免费视频| 老司机福利在线视频| 久久亚洲精品中文字幕| 久久精品欧美一区| 国产精品一区二区电影| 免费成人高清| 国产一区二区三区四区五区传媒| 异国色恋浪漫潭| 日韩欧美一二三四区| 最新国产在线观看| 久久久久久久久久久国产| 国产高清在线一区二区| 成人影视在线播放| 亚洲欧美综合自拍| 久久久久久久久久久久电影| 天天操天天干天天爽| 成人久久久久久久久| 一区二区在线高清视频| 乱子伦一区二区三区| 一本色道无码道dvd在线观看| 亚洲一区二区av在线| 中文在线资源| 国产精品日韩欧美综合| 欧洲第一无人区观看| 手机看片久久久| 一精品久久久| 亚洲成年人电影| 18欧美乱大交hd1984| 欧美第一黄网免费网站| 韩国av中国字幕| 欧美激情 国产精品| 999精品视频在线观看| 福利视频第一区| 小说区图片区图片区另类灬| 新天堂中文资源官网在线观看| 新片速递亚洲合集欧美合集| 日韩欧美一区二区三区久久婷婷| 国产一区二区视频在线观看| 亚洲国产一区二区三区在线播| 免费在线性爱视频| 国产精品第一区| jizzjizzji欧美| 一个色综合导航| 九一九一国产精品| 亚洲欧美国产一区二区三区| 欧美 亚欧 日韩视频在线| 蜜桃视频在线观看www社区| 五月婷婷欧美视频| 国产精品7m视频| 五月天亚洲视频| 国产精品电影久久久久电影网| 精品久久久无码人妻字幂| a级高清视频欧美日韩| 永久免费观看精品视频| 国产一线天粉嫩馒头极品av| 免费在线观看黄网站| 国产精品第八页| 亚洲国产中文字幕久久网| 久久久久久久久久久亚洲| 国产一区二区久久久久| 天堂久久久久久| 欧美三日本三级少妇三99| 精品动漫一区二区三区| 日韩欧美在线免费观看视频| 最新国产精品拍自在线播放| 亚洲综合一区在线| h视频在线观看网站| 亚洲精品成人一区| 免费福利视频一区二区三区| 亚洲日产国产精品| 亚洲美女尤物影院| 免费不卡在线视频| 肉丝袜脚交视频一区二区| 午夜激情在线视频| 夜夜爽妓女8888视频免费观看| 狠狠干视频网站| 亚洲综合精品伊人久久| 亚洲成av人影院在线观看网| av自拍一区| 国产精品国产对白熟妇| 成人福利视频网| 日韩av片永久免费网站| 中文在线有码| 天堂av电影在线观看| 国产免费黄色大片| 99亚洲男女激情在线观看| а√天堂在线官网| 久久久久狠狠高潮亚洲精品| 久久精品人妻一区二区三区| av电影免费看| 1234区在线观看视频免费| 成人欧美一区| 久久精品欧美一区二区三区不卡| 国产亚洲一区| 97精品人妻一区二区三区| 欧美人妖在线观看| 一级黄色av片| 国产精品国产三级国产试看| 国产美女搞久久| 亚洲狠狠丁香婷婷综合久久久| 亚洲自拍小视频| 18欧美乱大交| bdsm在线观看播放视频| 69堂国产成人免费视频| 激情小说综合区| 人人超在线公开视频| 老司机aⅴ毛片免费观看| 国产精品扒开腿做爽爽爽男男| 无码人妻丰满熟妇区毛片蜜桃精品| 免费国产亚洲视频| 91精品国产高清自在线| 成人美女免费网站视频| 国内精品久久久久影院薰衣草| 国产成人精品一区二三区四区五区| 一区二区欧美精品| 亚洲av无码专区在线| 精品一区二区免费看| 99久久久精品| 免费高清在线观看免费| 国产强伦人妻毛片| 夜夜爽av福利精品导航| 久久国产精品1区2区3区网页| 91精品国产综合久久精品图片| 欧美激情视频在线播放| 亚洲午夜精品久久久中文影院av| 污污网站在线免费观看| 肉色超薄丝袜脚交一区二区| 亚洲成人综合视频| 丁香六月综合激情| mm131丰满少妇人体欣赏图| 日韩高清电影免费| 亚洲精品视频一二三区| 国产一区免费在线| 天堂va欧美va亚洲va老司机| 中文字幕一区二区三区av| 国产精品欧美综合| 精品爽片免费看久久| 午夜av成人| 国产综合精品视频| 婷婷福利视频导航| 亚洲国产日本| xx00欧美| 中文字幕视频免费观看| 国产精品69精品一区二区三区| 久久er视频| 2001个疯子在线观看| 国产精品无码一区二区桃花视频| 国产精品国产亚洲精品看不卡| 国产精品无码人妻一区二区在线| a天堂在线观看视频|