精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C++ 類成員函數(shù)指針語(yǔ)法的友好指南

開發(fā) 后端
如果你正在尋找性能、復(fù)雜性或許多可能的解決方法來解決問題,那么在涉及到極端的情況下,C++ 總是一個(gè)很好的選擇。當(dāng)然,功能通常伴隨著復(fù)雜性,但是一些 C++ 的特性幾乎難以分辨。根據(jù)我的觀點(diǎn),C++ 的 類成員函數(shù)指針 也許是我接觸過的最復(fù)雜的表達(dá)式,但是我會(huì)先從一些較簡(jiǎn)單的開始。

[[406338]]

一旦你理解了一般原則,C++ 類成員函數(shù)指針不再那么令人生畏。

如果你正在尋找性能、復(fù)雜性或許多可能的解決方法來解決問題,那么在涉及到極端的情況下,C++ 總是一個(gè)很好的選擇。當(dāng)然,功能通常伴隨著復(fù)雜性,但是一些 C++ 的特性幾乎難以分辨。根據(jù)我的觀點(diǎn),C++ 的 類成員函數(shù)指針 也許是我接觸過的最復(fù)雜的表達(dá)式,但是我會(huì)先從一些較簡(jiǎn)單的開始。

文章中的例子可以在我的 Github 倉(cāng)庫(kù) 里找到。

C 語(yǔ)言:函數(shù)指針

讓我們先從一些基礎(chǔ)開始:假設(shè)你有一個(gè)函數(shù)接收兩個(gè)整數(shù)作為參數(shù)返回一個(gè)整數(shù):

  1. int sum(int a, int b) {
  2. return a+b;
  3. }

在純 C 語(yǔ)言中,你可以創(chuàng)建一個(gè)指向這個(gè)函數(shù)的指針,將其分配給你的 sum(...) 函數(shù),通過解引用來調(diào)用它。函數(shù)的簽名(參數(shù)、返回類型)必須符合指針的簽名。除此之外,一個(gè)函數(shù)指針表現(xiàn)和普通的指針相同:

  1. int (*funcPtrOne)(int, int);
  2.  
  3. funcPtrOne = ∑
  4.  
  5. int resultOne = funcPtrOne(2, 5);

如果你使用指針作為參數(shù)并返回一個(gè)指針,這會(huì)顯得很丑陋:

  1. int *next(int *arrayOfInt){
  2. return ++arrayOfInt;
  3. }
  4.  
  5. int *(*funcPtrTwo)(int *intPtr);
  6.  
  7. funcPtrTwo = &next;
  8.  
  9. int resultTwo = *funcPtrTwo(&array[0]);

C 語(yǔ)言中的函數(shù)指針存儲(chǔ)著子程序的地址。

指向類成員函數(shù)的指針

讓我們來進(jìn)入 C++:好消息是你也許不需要使用類成員函數(shù)指針,除非在一個(gè)特別罕見的情況下,比如說接下來的例子。首先,你已經(jīng)知道定義一個(gè)類和其中一個(gè)成員函數(shù):

  1. class MyClass
  2. {
  3. public:
  4.  
  5. int sum(int a, int b) {
  6. return a+b;
  7. }
  8.  
  9. };

1、定義一個(gè)指針指向某一個(gè)類中一個(gè)成員函數(shù)

聲明一個(gè)指針指向 MyClass 類成員函數(shù)。在此時(shí),你并不知道想調(diào)用的具體函數(shù)。你僅僅聲明了一個(gè)指向 MyClass 類中任意成員函數(shù)的指針。當(dāng)然,簽名(參數(shù)、返回值類型)需要匹配你接下想要調(diào)用的 sum(...) 函數(shù):

  1. int (MyClass::*methodPtrOne)(int, int);

2、賦值給一個(gè)具體的函數(shù)

為了和 C 語(yǔ)言(或者 靜態(tài)成員函數(shù))對(duì)比,類成員函數(shù)指針不需要指向絕對(duì)地址。在 C++ 中,每一個(gè)類中都有一個(gè)虛擬函數(shù)表(vtable)用來儲(chǔ)存每個(gè)成員函數(shù)的地址偏移量。一個(gè)類成員函數(shù)指針指向 vtable 中的某個(gè)條目,因此它也只存儲(chǔ)偏移值。這樣的原則使得 多態(tài) 變得可行。

因?yàn)?nbsp;sum(...) 函數(shù)的簽名和你的指針聲明匹配,你可以賦值簽名給它:

  1. methodPtrOne = &MyClass::sum;

3、調(diào)用成員函數(shù)

如果你想使用指針調(diào)用一個(gè)類成員函,你必須提供一個(gè)類的實(shí)例:

  1. MyClass clsInstance;
  2. int result = (clsInstance.*methodPtrOne)(2,3);

你可以使用 . 操作符來訪問,使用 * 對(duì)指針解引用,通過提供兩個(gè)整數(shù)作為調(diào)用函數(shù)時(shí)的參數(shù)。這是丑陋的,對(duì)吧?但是你可以進(jìn)一步應(yīng)用。

在類內(nèi)使用類成員函數(shù)指針

假設(shè)你正在創(chuàng)建一個(gè)帶有后端和前端的 客戶端/服務(wù)器 原理架構(gòu)的應(yīng)用程序。你現(xiàn)在并不需要關(guān)心后端,相反的,你將基于 C++ 類的前端。前端依賴于后端提供的數(shù)據(jù)完成初始化,所以你需要一個(gè)額外的初始化機(jī)制。同時(shí),你希望通用地實(shí)現(xiàn)此機(jī)制,以便將來可以使用其他初始化函數(shù)(可能是動(dòng)態(tài)的)來拓展你的前端。

首先定義一個(gè)數(shù)據(jù)類型用來存儲(chǔ)初始化函數(shù)(init)的指針,同時(shí)描述何時(shí)應(yīng)調(diào)用此函數(shù)的信息(ticks):

  1. template<typename T>
  2. struct DynamicInitCommand {
  3. void (T::*init)(); // 指向額外的初始化函數(shù)
  4. unsigned int ticks; // 在 init() 調(diào)用后 ticks 的數(shù)量
  5. };

下面一個(gè) Frontend 類示例代碼:

  1. class Frontend
  2. {
  3. public:
  4.  
  5. Frontend(){
  6. DynamicInitCommand<Frontend> init1, init2, init3;
  7.  
  8. init1 = { &Frontend::dynamicInit1, 5};
  9. init2 = { &Frontend::dynamicInit2, 10};
  10. init3 = { &Frontend::dynamicInit3, 15};
  11.  
  12. m_dynamicInit.push_back(init1);
  13. m_dynamicInit.push_back(init2);
  14. m_dynamicInit.push_back(init3);
  15. }
  16. void tick(){
  17. std::cout << "tick: " << ++m_ticks << std::endl;
  18. /* 檢查延遲初始化 */
  19. std::vector<DynamicInitCommand<Frontend>>::iterator it = m_dynamicInit.begin();
  20.  
  21. while (it != m_dynamicInit.end()){
  22. if (it->ticks < m_ticks){
  23. if(it->init)
  24. ((*this).*(it->init))(); // 這里是具體調(diào)用
  25.  
  26. it = m_dynamicInit.erase(it);
  27.  
  28. } else {
  29. it++;
  30. }
  31. }
  32. }
  33. unsigned int m_ticks{0};
  34. private:
  35.  
  36. void dynamicInit1(){
  37. std::cout << "dynamicInit1 called" << std::endl;
  38. };
  39.  
  40. void dynamicInit2(){
  41. std::cout << "dynamicInit2 called" << std::endl;
  42. }
  43.  
  44. void dynamicInit3(){
  45. std::cout << "dynamicInit3 called" << std::endl;
  46. }
  47.  
  48. unsigned int m_initCnt{0};
  49. std::vector<DynamicInitCommand<Frontend> > m_dynamicInit;
  50. };

在 Frontend 完成實(shí)例化后,tick() 函數(shù)會(huì)被后端以固定的時(shí)間時(shí)間調(diào)用。例如,你可以每 200 毫秒調(diào)用一次:

  1. int main(int argc, char* argv[]){
  2. Frontend frontendInstance;
  3.  
  4. while(true){
  5. frontendInstance.tick(); // 僅用于模擬目的
  6. std::this_thread::sleep_for(std::chrono::milliseconds(200));
  7. }
  8. }

Fronted 有三個(gè)額外的初始化函數(shù),它們必須根據(jù) m_ticks 的值來選擇調(diào)用哪個(gè)。在 ticks 等于何值調(diào)用哪個(gè)初始化函數(shù)的信息存儲(chǔ)在數(shù)組 m_dynamicInit 中。在構(gòu)造函數(shù)(Frontend())中,將此信息附加到數(shù)組中,以便在 5、10 和 15 個(gè) tick 后調(diào)用其他初始化函數(shù)。當(dāng)后端調(diào)用 tick() 函數(shù)時(shí),m_ticks 值會(huì)遞增,同時(shí)遍歷數(shù)組 m_dynamicInit 以檢查是否必須調(diào)用初始化函數(shù)。

如果是這種情況,則必須通過引用 this 指針來取消引用成員函數(shù)指針:

  1. ((*this).*(it->init))()

總結(jié)

如果你并不熟悉類成員函數(shù)指針,它們可能會(huì)顯得有些復(fù)雜。我做了很多嘗試和經(jīng)歷了很多錯(cuò)誤,花了一些時(shí)間來找到正確的語(yǔ)法。然而,一旦你理解了一般原理后,方法指針就變得不那么可怕了。

這是迄今為止我在 C++ 中發(fā)現(xiàn)的最復(fù)雜的語(yǔ)法。

 

責(zé)任編輯:龐桂玉 來源: Linux中國(guó)
相關(guān)推薦

2010-02-02 15:01:59

C++成員函數(shù)指針

2011-07-20 16:09:08

C++

2009-05-26 09:31:00

C++重載覆蓋

2010-01-18 18:04:28

靜態(tài)成員

2024-02-22 18:07:17

C++靜態(tài)成員代碼

2010-01-21 14:28:03

C++靜態(tài)成員函數(shù)

2010-01-19 18:35:12

靜態(tài)成員

2010-02-01 17:31:06

C++類成員

2010-02-02 10:07:59

C++全局函數(shù)

2023-11-22 13:22:51

C++函數(shù)

2011-04-11 11:09:50

this指針

2010-01-18 15:53:27

C++析構(gòu)函數(shù)

2016-12-26 09:23:18

C++函數(shù)覆蓋

2010-01-21 09:34:57

C++語(yǔ)法

2010-02-06 09:31:42

C++函數(shù)對(duì)象

2011-07-20 17:54:02

C++

2024-12-30 11:12:59

C++靜態(tài)成員函數(shù)

2010-02-04 10:08:00

C++靜態(tài)成員函數(shù)

2021-12-21 15:31:10

C++語(yǔ)言指針

2011-07-12 11:15:46

C++
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美日韩xx| 国产原创中文av| 亚洲美女15p| 91黄色免费网站| 在线观看免费91| 精品欧美一区二区精品少妇| 精品动漫一区| 中文字幕日韩有码| 99国产精品免费视频| 激情aⅴ欧美一区二区欲海潮 | 精品国产av色一区二区深夜久久| 国产欧美一区二区三区精品酒店| 国产精品美日韩| 51国偷自产一区二区三区| 自拍偷拍欧美亚洲| 99精品在线观看| 亚洲国产精品久久久久| 亚洲 激情 在线| bbw在线视频| 国产精品高清亚洲| 欧美凹凸一区二区三区视频| 国产视频在线免费观看| 亚洲尤物在线| 久久成人免费视频| www.99热| 国产亚洲成av人片在线观黄桃| 欧美三级三级三级| 久久精品国产sm调教网站演员| 幼a在线观看| 91麻豆免费看| 亚洲xxxx视频| 中文在线字幕av| 99精品国产在热久久婷婷| zzjj国产精品一区二区| 日本二区在线观看| 猫咪成人在线观看| 精品精品欲导航| 黄色aaaaaa| 日本美女久久| 91国产丝袜在线播放| 欧美又粗又长又爽做受| 中文字幕在线播放网址| 中文字幕一区二区三| 欧洲在线视频一区| 色资源在线观看| 大尺度一区二区| 97久久夜色精品国产九色| 中文字字幕在线中文乱码| 久久国产精品毛片| 97超级碰碰碰久久久| 久久婷婷国产麻豆91| 91精品观看| 久久视频在线直播| 亚洲人与黑人屁股眼交| 青青草国产成人a∨下载安卓| 亚洲视频电影图片偷拍一区| 中文字幕在线观看网址| 欧美大胆视频| 亚洲精品国产精品国自产观看浪潮| 99999精品| 精品国产亚洲一区二区三区| 欧美乱妇一区二区三区不卡视频| 国产原创精品在线| 美女视频一区| 欧美美女网站色| 在线免费看v片| 久久精品九色| 欧美大片一区二区三区| 久久免费精品国产| 亚洲成aⅴ人片久久青草影院| 日韩高清免费在线| av女人的天堂| 欧美成免费一区二区视频| 丝袜情趣国产精品| 午夜爱爱毛片xxxx视频免费看| 在线一区电影| 97国产在线视频| 中文字幕亚洲精品一区| 日韩成人免费电影| 国产一区二区在线免费| av一级黄色片| av成人老司机| 性欧美大战久久久久久久免费观看 | 好看不卡的中文字幕| 久久久欧美一区二区| 日韩成人一区二区三区| 日韩国产精品大片| 成人做爰www免费看视频网站| 国产高清精品软件丝瓜软件| 99re这里只有精品首页| 日韩精品在在线一区二区中文 | 欧美精品免费播放| 日本黄色片视频| 老司机午夜免费精品视频| 国产精品一区二区女厕厕| 精品国产18久久久久久| 91美女在线观看| 亚洲欧洲另类精品久久综合| 搞黄网站在线观看| 精品久久久久久久久久国产| 亚欧美在线观看| 国产精品久久久网站| 国产一区二区美女视频| 欧美高清视频一区二区三区| 午夜亚洲一区| **亚洲第一综合导航网站| 天天在线女人的天堂视频| 国产精品水嫩水嫩| 大陆av在线播放| 久久91视频| 精品电影一区二区| 日本黄区免费视频观看| 国产视频久久| 91香蕉国产在线观看| 欧美女v视频| 亚洲精品国产第一综合99久久| 免费高清在线观看免费| 免费看一区二区三区| 在线成人激情视频| 亚洲激情视频一区| 国内久久精品视频| 色噜噜狠狠一区二区三区| 91资源在线观看| 欧美日韩在线观看一区二区| 给我看免费高清在线观看| 欧美精品导航| 成人h视频在线| 免费看男男www网站入口在线| 夜夜精品浪潮av一区二区三区| 亚洲一二三区av| 全球av集中精品导航福利| 欧美美女15p| 国产麻豆免费观看| 中文字幕精品一区| 欧美 激情 在线| 超碰精品在线| 欧美理论电影在线观看| 国产精品探花视频| 国产精品私房写真福利视频| 欧美激情精品久久久久久小说| 国产乱人伦丫前精品视频| 欧美成人精品激情在线观看| 91九色蝌蚪91por成人| 日本一区二区三区久久久久久久久不 | 头脑特工队2免费完整版在线观看| 一区二区三区在线观看视频| 视频免费1区二区三区| 欧美精品一二| 国产国语videosex另类| 天堂在线一二区| 激情懂色av一区av二区av| 国产成人av片| 国产精品二区影院| 亚洲伊人久久综合| av免费在线免费| 欧美一区二区高清| 欧美黄片一区二区三区| 国产成人精品影视| 无码熟妇人妻av在线电影| 91综合久久爱com| 久久琪琪电影院| 性插视频在线观看| 欧美日韩国内自拍| 草草影院第一页| 久久激情久久| 亚洲成人自拍| 精品视频在线观看网站| 欧美精品一区二区三区国产精品 | 另类的小说在线视频另类成人小视频在线| 欧美婷婷久久| 久久爱.com| 久热精品在线视频| www.久久伊人| 亚洲成人你懂的| 日本黄色录像片| 久久狠狠一本精品综合网| 日本午夜精品电影| 99热这里有精品| 欧美激情欧美狂野欧美精品| 四虎精品一区二区三区| 91精品办公室少妇高潮对白| 美女av免费看| 国产成人av电影免费在线观看| 亚洲理论电影在线观看| 久久99国产成人小视频| 国产日韩欧美一二三区| 色黄网站在线观看| 国产视频综合在线| 91福利在线观看视频| 亚洲成人一区二区| 影音先锋制服丝袜| 国产成人亚洲精品青草天美| 久久久性生活视频| 欧美日韩激情在线一区二区三区| 国产一区二区色| а√天堂中文在线资源8| 亚洲图片在区色| 国产精品国产av| 午夜国产精品一区| 日韩精品久久久久久久的张开腿让| 国产精品一区在线观看你懂的| 欧美日韩成人免费视频| 日韩精品一区二区久久| 鬼打鬼之黄金道士1992林正英| 欧美成a人片在线观看久| 九九九久久久久久| 国产视频精选在线| 欧美精品一区二区三区视频 | 欧美精品18+| 国产手机在线视频| 亚洲色图欧美偷拍| 日韩人妻一区二区三区| 国产成人精品免费一区二区| 日本www高清视频| 精品白丝av| 亚洲免费av网| 欧美美女视频| 国产精品区一区二区三在线播放 | 国内av一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 无码人妻少妇伦在线电影| 日韩欧美中文| 精品欧美日韩在线| 日韩av综合| 国产精品爽爽爽爽爽爽在线观看| 亚洲啊v在线| 欧美大秀在线观看| 黄色国产网站在线播放| 在线视频免费一区二区| 你懂的在线免费观看| 精品国内片67194| 国产精品老熟女视频一区二区| 欧美亚洲愉拍一区二区| 无码视频在线观看| 懂色av中文一区二区三区天美| 欧美人妻精品一区二区三区 | 午夜欧美性电影| 香蕉久久夜色精品国产使用方法| 肥熟一91porny丨九色丨| 国产剧情一区二区在线观看| 91精品久久久久久久久久另类| 日韩成人影音| 日本精品va在线观看| www.youjizz.com在线| 精品少妇一区二区30p| 超碰免费在线播放| 成人97在线观看视频| а√天堂官网中文在线| 久久天天躁夜夜躁狠狠躁2022| 五月婷婷在线视频| 精品国内自产拍在线观看| 欧美videos极品另类| 精品国产欧美一区二区三区成人| 在线免费看av| 日韩中文字幕在线播放| 天堂地址在线www| zzjj国产精品一区二区| 国产精品实拍| 久久国产加勒比精品无码| 4438x成人网全国最大| 欧美xxxx18国产| a毛片在线看免费观看| 久久久国产精品免费| 成人在线观看免费网站| 欧美大秀在线观看| hd国产人妖ts另类视频| **欧美日韩vr在线| 天天综合网天天| 国产精品综合久久久| 精品视频一区二区三区| a级国产乱理论片在线观看99| h视频久久久| 久久综合狠狠综合久久综青草| 国产精品最新| 中文字幕一区二区三区5566| 午夜欧美视频| 免费无码国产v片在线观看| 丝袜美腿亚洲一区| 黄色片免费网址| 成人性生交大片免费看中文 | 亚洲国产aⅴ精品一区二区三区| 成人一区二区电影| 成人自拍在线| 日韩av不卡在线播放| 天天射天天综合网| 欧美精品自拍视频| 亚洲综合不卡| 中日韩av在线播放| 成人在线视频一区| 欧美丰满美乳xxⅹ高潮www| 亚洲青青青在线视频| 精品美女久久久久| 精品视频一区三区九区| 国产黄a三级三级看三级| 亚洲精品综合精品自拍| 日本三级在线播放完整版| 久久久久久久久中文字幕| 日韩高清在线| aaa级精品久久久国产片| 国产毛片一区二区三区 | 日韩精品视频一区二区| 国产精品入口麻豆原神| 国产亚洲欧美精品久久久久久 | 超碰在线观看91| 日韩手机在线导航| 99青草视频在线播放视| 性欧美长视频免费观看不卡| 成人亚洲网站| 久久精品中文字幕一区二区三区 | 欧美卡一卡二卡三| 色欧美日韩亚洲| 午夜久久久久久久久久| 一区二区三区精品99久久| ****av在线网毛片| 91精品视频在线免费观看| 亚洲精品动态| avav在线播放| 久久国产精品99久久久久久老狼 | 色阁综合伊人av| 蜜桃视频www网站在线观看| 91在线中文字幕| 成人免费看片39| 四虎永久在线精品无码视频| 成人午夜私人影院| 欧美老熟妇一区二区三区| 欧美日韩精品二区第二页| 视频国产在线观看| 久久久久久这里只有精品| 成人综合日日夜夜| 亚洲aⅴ天堂av在线电影软件| 亚洲专区一区| 看全色黄大色黄女片18| 亚洲专区一二三| 99久久一区二区| 久久精品免费电影| 高清欧美日韩| 五月天综合网| 天堂久久久久va久久久久| av无码av天天av天天爽| 精品久久久视频| 欧美一区二区三区激情| 欧美激情a∨在线视频播放| crdy在线观看欧美| 中文网丁香综合网| 激情文学综合插| 日本成人精品视频| 欧美日韩国产一二三| av在线中文| 国产欧美一区二区三区四区| 精品国产乱码久久久| 欧美日韩怡红院| 中文字幕精品一区| 一级视频在线播放| yw.139尤物在线精品视频| www999久久| 国产乱人伦精品一区二区三区| 国产综合久久久久久久久久久久| 少妇被躁爽到高潮无码文| 欧美一级欧美三级在线观看| 青青草原av在线| 国产欧美丝袜| 香蕉久久夜色精品| 欧美成人国产精品一区二区| 欧美性一二三区| 免费观看成人高潮| 亚洲free性xxxx护士白浆| 欧美午夜在线| 黑丝av在线播放| 在线亚洲一区观看| 嫩草香蕉在线91一二三区| 91国产在线播放| 亚洲国产1区| 不卡一区二区在线观看| 在线看日韩精品电影| 欧洲不卡视频| 91久久精品一区二区别| 日韩视频一区| 东方伊人免费在线观看| 欧美丰满一区二区免费视频| 神马午夜伦理不卡| 久久久精品国产一区二区三区| 日韩国产欧美一区二区三区| 国产成人免费在线观看视频| 欧美电影免费提供在线观看| 久久sese| 日本xxx免费| 91欧美激情一区二区三区成人| 中文字幕乱码在线观看| 欧美区二区三区| 伊人成综合网yiren22| 99九九99九九九99九他书对| 亚洲电影在线免费观看| 成人jjav| 成人性色av| 丝袜美腿成人在线| 免费一级片在线观看| 国产一区二区三区在线视频 | 一区二区三区少妇| 欧美精品色综合| 九色porny视频在线观看|