日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

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

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

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

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

介紹

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

背景

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

 

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

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

示例程序

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

 

 
  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. }; 

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

 

 
  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)

對于一個不是 volatile 和 const 的簡單函數(shù)而言,實現(xiàn)是非常簡單的,我們只需要創(chuàng)建一個類保存兩個指針,一個是對象,另外一個是成員函數(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 允許定義任意個數(shù)和類型參數(shù)的operator()函數(shù),而create_function 實現(xiàn)只需簡單返回該類的對象:

 

 
  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; 

實際中,我們需要另外的三個實現(xiàn)用于覆蓋 const、volatile 和 const volatile 三種成員函數(shù),這也是為什么傳統(tǒng)使用 #define 宏很便捷的原因,讓你無需重寫代碼段,下面是完整的實現(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ā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
av一区在线| 人人做人人澡人人爽欧美| 日韩精品视频在线播放| 一区二区三区在线|网站| 99精品免费观看| 日韩欧美99| 国产视频一二区| 99久久婷婷| 精品一二三区| 欧美日韩精品在线观看| 中文字幕欧美日韩在线| 久久99蜜桃精品| 亚洲三级国产| 欧美日韩在线视频首页| 国产欧美日韩中文字幕在线| 国产黄在线观看免费观看不卡| 国产一级一片免费播放| 在线一区av| 久久精品欧美日韩精品| 二区视频在线观看| 黄色欧美日韩| 日韩视频中文字幕| 亚洲欧美久久久| 91精品国产综合久久福利| 欧美在线视频第一页| 区日韩二区欧美三区| 在线一区av| 一本一道综合狠狠老| 天天摸日日摸狠狠添| 日韩欧美字幕| 欧美日韩精品不卡| 亚洲乱码视频| 国产激情三区| 欧美久久一二三四区| 欧美一级手机免费观看片| 日韩精品在线播放| 久久视频一区| 国内精品露脸在线视频播放| 国产成人精品999| 欧美啪啪一区| 精品亚洲综合| 成年人黄国产| 午夜国产在线视频| 欧美久久在线| 国产在线视频一区二区| 国产资源在线观看入口av| 国产亚洲二区| 国产日韩中文字幕| 欧美婷婷久久| 在线精品日韩| 欧美日韩精品中文字幕| 国产成人精品网址| 欧美日韩99| 亚洲热线99精品视频| 国产高清在线观看| 国产 欧美 在线| 日韩美女中文字幕| 欧美日韩国产123区| 亚洲国产欧美久久| 精品久久91| 亚洲欧美中文字幕在线一区| 欧美日韩激情在线一区二区三区| 中文天堂在线一区| 精品色蜜蜜精品视频在线观看| 日韩精品a在线观看91| 国产www在线观看| 欧美日韩视频网站| 国产v日产∨综合v精品视频| 欧美日韩国产一区在线| 午夜一区二区三区免费| 精品国产99久久久久久| 中文字幕精品国产| 亚洲综合日韩中文字幕v在线| 国产在线精品日韩| 不卡中文一二三区| 欧美在线日韩精品| 精品在线网站观看| 一级片免费网站| 日韩中文欧美| 中文字幕国产日韩| 国产一区精品| 日韩欧美中文第一页| 日韩中文字幕视频在线观看| 日韩亚洲一区在线| 精品国产综合久久| 精品调教chinesegay| 欧美国产综合在线V| 国产一二三区精品视频| 亚洲免费观看视频| 国产在线观看a| 一区二区高清在线| 蜜桃久久av一区| 人妻一区二区三区免费| 亚洲一区日韩在线| 亚洲国产午夜精品| 日韩免费精品视频| 国产欧美日韩三级| 中文字幕人成乱码在线观看| 日韩在线中文视频| 中文字幕视频在线免费欧美日韩综合在线看| 欧美性极品xxxx做受| 中文字幕在线视频网| 欧美日韩国产一区| 在线日韩中文字幕| 日韩国产在线观看一区| 中文国产字幕在线观看| 91精品啪在线观看国产60岁| 97久久精品| 国产一级片在线| 91精品在线视频观看| 国产午夜精品视频| 精品在线一区二区三区| 深夜福利一区| 中文字幕中文字幕精品| 日本精品在线| 一区二区日韩免费看| 日韩高清不卡| 亚洲男人在线| 国产欧美日韩在线观看| 中文字幕在线视频日韩| 精品一二线国产| 一区二区三区久久| 亚洲视频在线观看日本a| 欧美国产综合视频| 91日韩欧美| 久久久久久99精品| 久久久91精品| 精品全国在线一区二区| 一区三区视频| 91精品在线观看入口| 国产福利在线导航| 亚洲一区导航| 国产午夜精品一区二区三区视频| 中文字幕亚洲一区在线观看| 亚洲.国产.中文慕字在线| 91精品免费在线观看| 欧美亚洲视频在线看网址| 日韩欧美亚洲国产| 亚洲深夜福利| 免费国产成人看片在线| 日韩国产在线不卡视频| 欧美日韩国产中文精品字幕自在自线| 欧美亚洲另类制服自拍| 日韩欧美中文字幕在线视频| 一区视频在线播放| 三级精品视频| 日韩不卡在线播放| 在线中文字幕视频| 欧美日韩国产大片| 日韩高清不卡在线| xxxxx性| 国产一级免费| 中文天堂资源在线| 91精品国产91久久久久青草| 91精品xxx在线观看| 精品久久在线观看| 91久久精品国产91久久| 91久久精品午夜一区二区| 国产天堂素人系列在线视频| 日韩在线小视频| 国产日韩av一区二区| 亚洲一区资源| 日本黄色一区二区| 国产一区日韩欧美| 免费在线视频一级不卡| 老司机久久99久久精品播放免费| 蜜臀国产一区| 在线观看精品国产| 天堂精品高清1区2区3区| 精品日韩在线播放| 一区精品在线播放| 日本黄色一区二区三区| av首页在线| 蜜桃视频中文字幕| 99精品999| 欧美日韩国产在线观看| 欧美日韩亚洲天堂| 日韩一级在线视频| 久久人人精品| 在线不卡日本| 国产成人精品999| 中文字幕亚洲视频| 精品一区二区在线观看视频| 日韩三级视频在线播放| 免费国产成人看片在线| 久久手机免费观看| 日韩a一区二区| 在线视频色在线| 日韩免费视频一区二区视频在线观看 | 国产99对白在线播放| 欧美一级欧美三级在线观看| 亚洲精品中文字幕乱码三区不卡| 欧美在线中文字幕| 国内国产区免费视频| 日韩精品在线视频观看| 91精品无人成人www| 国产极品嫩模在线视频一区| 福利一区二区| 亚洲一区三区在线观看| 日韩三级视频在线播放| 欧美日韩在线播放一区| 日韩.欧美.亚洲| 亚洲国产午夜精品| 久久久精品日韩欧美| 狠狠色综合色区| 首页国产欧美久久| 黄色一区二区视频| 国产综合成人久久大片91| 日韩久久精品视频| 在线视频不卡一区二区| 亚洲一区激情| 999精品网| 久久久91精品国产| 中文字幕亚洲一区在线观看| 欧美 亚洲 精品 三区| 欧美日韩在线不卡一区| 中文字幕久久精品| 亚州黄色一级| 黄色国产网站在线播放| 国产欧美综合在线观看第十页| www.狠狠| 久久婷婷综合国产| 欧美 日韩 国产在线| 欧美另类久久久品| 亚洲热线99精品视频| 综合激情一区| 国产黄色片中文字幕| 国产专区中文字幕| 欧美二三四区| 精品日韩欧美在线| 欧美.日韩.国产.一区.二区| 亚洲永久字幕| 日韩精品视频在线| 久久91精品久久久久久秒播| 欧美不卡一二三| 精品福利一区二区三区| 亚洲三级av| aaa欧美日韩| 91精品久久久久| 欧美 日韩 国产 在线| 成片免费观看| 日韩免费视频一区二区| 国产日韩av一区| 韩国一区二区av| 欧美日韩亚洲国内综合网| 免费高清在线一区| 欧美日韩国产在线看| 久久riav| 日韩精品三级| 91精品国产日韩91久久久久久| 日韩欧美国产网站| 黄色精品在线观看| 国产福利精品导航| 日韩欧美亚洲国产| 麻豆一区二区99久久久久| 欧美日韩夫妻久久| 亚洲午夜91| 欧美 日韩 国产 高清| www.91香蕉视频| 在线视频不卡一区二区| 国产啊啊啊视频在线观看| 亚洲福利在线看| 精品一区二区在线观看视频| av丝袜在线| 久久精品99久久久久久久久| av一卡二卡| 日韩在线视频一区| 91麻豆视频网站| 日韩精品午夜| 国产天堂素人系列在线视频| 午夜影院在线观看欧美| 亚洲女人天堂a在线播放| 欧美日韩国产页| 日韩精品中文字幕第1页| 视频一区不卡| 精品亚洲国内自在自线福利| 中文字幕高清在线播放| 精品欧美日韩| 欧美日韩在线不卡一区| 一区二区三区在线不卡| 欧美日本精品| 亚洲va久久久噜噜噜久久| 中文字幕在线导航| 国产 中文 字幕 日韩 在线| 欧美日韩国产在线观看| 国产欧美综合在线| 国产婷婷一区二区| 午夜视频在线观看一区| 日韩欧美在线视频日韩欧美在线视频| 欧美xxxx中国| 欧美.日韩.国产.一区.二区| 99热最新网址| 伊人精品视频| 亚洲成年人在线播放| 丰满少妇一区| 中文字幕在线亚洲| 一区二区三区免费看视频| 欧美久久久久久蜜桃| 欧美日韩精品不卡| 成人xxxx| 中文字幕亚洲欧美| 欧美三级三级三级爽爽爽| 日韩免费不卡avV| 国产不卡在线| 中文字幕欧美亚洲| 亚洲高清视频一区| 成人欧美亚洲| 国产亚洲欧美色| 日韩在线观看视频一区二区| 国产羞羞视频在线播放| а√天堂8资源中文在线| 精品视频在线导航| 精品久久蜜桃| 国精品产品一区| 日韩中文字幕精品视频| 国产一级片在线| 日本黄色一区二区| 欧洲精品在线一区| 日本亚洲欧美天堂免费| 国产高清在线一区| 中文精品视频| 国产在线高清精品| 日韩三级视频在线看| av中文在线播放| 国产一区 二区 三区一级| 国产区日韩欧美| 日韩欧美在线第一页| 国产日产一区二区三区| 国产欧美日韩不卡免费| 国产黄色小视频| 国产一区高清视频| 日韩一级二级三级| 国产乱国产乱300精品| av亚洲免费| 久久精品视频免费看| 视频一区三区| 亚洲欧美999| 中文字幕在线观看亚洲| 亚洲中午字幕| 日韩欧美综合| xxxxx性| 午夜福利一区二区三区| 欧美日韩在线观看一区| www日韩在线观看| 一区二区91| 亚欧成人精品| 欧美大片在线观看一区| 国产视频一区三区| 亚洲欧美久久久| 在线免费91| 国产日韩综合| 日韩欧美中文字幕在线观看| 日韩精品视频在线播放| 亚洲国产欧美日韩精品| 在线精品视频免费播放| av免费在线网站| 在线精品观看| 精品国产乱码久久久久久牛牛| 不卡在线一区二区| 欧美不卡123| 亚洲免费观看在线观看| 一二三区精品视频| 欧美区高清在线| 日韩欧美中文视频| 国产一区日韩欧美| 亚洲免费观看在线观看| 日韩在线视频一区| 顶级网黄在线播放| 精品日韩av一区二区| 欧美日韩国产一级片| 欧美日韩免费精品| www中文字幕| 精品国产1区2区3区| 欧美日韩国产一二三| 亚洲综合日韩欧美| 日韩区欧美区| 在线精品日韩| 欧美日韩在线不卡| 91日韩中文字幕| 综合激情一区| 国产亚洲二区| 精品播放一区二区| 日本视频久久久| 亚洲高清在线免费| 欧美日韩精品电影| 国产一卡2卡3卡四卡网站| 精品1区2区3区| 国产在线高潮| 91精品国产色综合久久久蜜香臀| 亚洲综合在线不卡| 日韩中文字幕网| 国产免费播放一区二区| 日韩手机在线观看视频| 国产一二三视频| 欧美一级免费看| 欧美日韩中文字幕综合视频| 日韩欧美综合| 91亚洲国产高清| 久草中文在线观看| 日韩中文在线视频|