精品欧美一区二区三区在线观看 _久久久久国色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)

欧美精品一区二区久久久| 欧美高清在线一区二区| 欧美激情一区二区久久久| 国产女人18毛片水真多18| 日本美女一区| 亚洲人123区| 久久天堂国产精品| 91国产精品一区| 亚洲福利精品| 中文字幕视频一区二区在线有码 | 91精品久久久久久粉嫩| 不卡的av在线| 国产精品爽黄69天堂a| 精品99在线观看| 欧美日韩第一| 精品88久久久久88久久久| 亚洲少妇第一页| 国产高清在线a视频大全| 国产欧美精品区一区二区三区| 91原创国产| 中文字幕第99页| 亚洲国产一区二区三区a毛片| 在线日韩日本国产亚洲| 亚洲av成人片无码| 精品国产亚洲一区二区三区| 狠狠久久亚洲欧美专区| 青青草综合视频| h视频在线播放| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲搞黄视频| 91色九色蝌蚪| 国产成人亚洲欧美| 一区二区三区亚洲视频| 久久亚洲精品伦理| 91国产精品电影| 少妇被躁爽到高潮无码文| 国产欧美日韩精品一区二区免费 | 亚洲成人综合视频| 91社在线播放| 国产高清在线观看| 久久网站热最新地址| 国产高清在线一区| av中文在线观看| 久久9热精品视频| 国产成人在线亚洲欧美| 久久精品视频1| 日韩视频不卡| 2019中文字幕全在线观看| 久久久久久久久久综合| 欧美91福利在线观看| 久久在线免费观看视频| 永久av免费网站| 天天射成人网| 久久精品国产99国产精品澳门| 国产午夜福利一区| 欧美日韩性在线观看| 亚洲视频欧洲视频| 波多野吉衣中文字幕| 亚洲精品亚洲人成在线| 日韩大陆毛片av| 精品无码在线视频| 综合亚洲色图| 亚洲欧美精品一区| 一区二区三区伦理片| 国产欧美久久一区二区三区| 亚洲色图综合久久| 无码少妇精品一区二区免费动态| 精品国产中文字幕第一页| 伊人久久久久久久久久久久久 | 日韩理论片网站| av电影一区二区三区| 操你啦在线视频| 亚洲一区二区三区四区在线| 国产午夜福利100集发布| 九色porny视频在线观看| 欧美日韩亚洲网| 麻豆av免费在线| 国内欧美日韩| 欧美一级夜夜爽| 中国极品少妇xxxx| 免费观看久久av| 日韩在线小视频| 欧美国产日韩综合| 在线亚洲国产精品网站| 国产精品男人的天堂| 国产一区二区三区三州| 东方aⅴ免费观看久久av| 久久精品ww人人做人人爽| 国产在线视频网址| 亚洲免费在线视频| 国产中文字幕在线免费观看| 日韩一级二级| 日韩一区二区电影| 精品少妇人妻一区二区黑料社区| 大片网站久久| 欧美黄网免费在线观看| 69视频免费在线观看| 精品一区二区三区影院在线午夜| 国产精品久久久久av福利动漫| 色哟哟在线观看| 中文字幕亚洲一区二区va在线| 国产精品一色哟哟| 日韩三区免费| 精品国产乱码久久久久久牛牛 | 欧美色图五月天| 中文字幕成人精品久久不卡 | 中出一区二区| 2025国产精品视频| a天堂视频在线| 久久久久久电影| 99久久久精品视频| 日韩高清不卡| 日韩大陆毛片av| 国内偷拍精品视频| 日韩中文字幕一区二区三区| 成人欧美一区二区三区视频 | 91麻豆6部合集magnet| 黄瓜视频免费观看在线观看www | 天天综合日日夜夜精品| 在线一区二区不卡| 精品中文一区| 高清欧美性猛交xxxx| 国产精品久久久久精| 95精品视频在线| 无码人妻精品一区二区蜜桃网站| 国产精品亚洲成在人线| 日韩精品免费在线视频| avove在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品一区日韩成人| 日韩av毛片| 欧美一卡2卡3卡4卡| 四虎影视1304t| 久久综合影音| 久久伊人资源站| caoporn视频在线| 欧美videos大乳护士334| 亚洲a∨无码无在线观看| 日韩精品成人一区二区三区| 免费av一区二区三区| 51精品视频| 亚洲精品一区二区三区99| 91九色丨porny丨极品女神| 久久精品久久久精品美女| 亚洲成人自拍视频| 日韩一区二区三区在线免费观看 | 国产日本欧美视频| www亚洲人| 欧美性色黄大片手机版| 免费看黄色av| 欧美aaa在线| 亚洲一区精彩视频| 欧美美女被草| 久久6精品影院| 亚洲国产精品二区| 亚洲午夜影视影院在线观看| 中文字幕一区二区三区人妻在线视频| 综合亚洲视频| 肥熟一91porny丨九色丨| 欧美aaaaaaa| 亚洲精品乱码久久久久久按摩观| 国产黄色片视频| 99国产精品久久久久久久久久 | 日本免费在线视频不卡一不卡二| 日韩av一级大片| 欧美视频免费看| 欧美成人精品在线播放| 成 人 免费 黄 色| 亚洲午夜在线电影| 熟女俱乐部一区二区| 奇米综合一区二区三区精品视频| 尤物国产精品| 97色成人综合网站| 日本久久久久亚洲中字幕| 成人性生交大片免费看午夜 | 国模人体一区二区| 精品久久久久久久大神国产| 免费人成又黄又爽又色| 久久精品国产99国产| 日韩中文字幕亚洲精品欧美| 国内精品偷拍| 国产精品人人做人人爽| а√中文在线8| 亚洲精品美女在线| 一区二区自拍偷拍| 亚洲国产精品一区二区久久恐怖片| 亚洲色图14p| 麻豆免费看一区二区三区| 四虎4hu永久免费入口| 牛牛影视久久网| 国产一区红桃视频| 爱情岛亚洲播放路线| 亚洲色图美腿丝袜| 亚洲成人777777| 91国在线观看| 久久久久久激情| 国产日产欧美一区| 亚洲黄色小说在线观看| 久久蜜桃资源一区二区老牛| 色香蕉在线观看| 亚洲最大在线| 成人av资源| 成人在线网站| 午夜精品一区二区三区在线播放| av大全在线免费看| 亚洲激情在线观看| 国产伦精品一区二区三区视频痴汉| 亚洲18色成人| 黄色片在线观看网站| 久久久国产综合精品女国产盗摄| 欧美日韩一区二区区别是什么| 日产欧产美韩系列久久99| www.av片| 一区二区三区四区日韩| 欧美综合激情| 网友自拍一区| 国产精品久久亚洲| 99久热在线精品视频观看| 国产精品h在线观看| 2020av在线| 欧美日韩福利视频| 欧美性猛交xxx乱大交3蜜桃| 亚洲日本成人网| 手机看片福利永久| 欧美不卡123| 99国产精品久久久久久久成人| 在线欧美日韩国产| 麻豆成人免费视频| 香蕉av福利精品导航| 久久精品波多野结衣| 综合在线观看色| 国产精品av久久久久久无| 337p粉嫩大胆噜噜噜噜噜91av| 婷婷五月精品中文字幕| 国产精品自拍网站| 8x8x成人免费视频| 美腿丝袜亚洲综合| 韩国中文字幕av| 日本不卡一区二区三区| 天天操天天摸天天爽| 日韩和欧美的一区| av在线无限看| 日韩激情av在线| 国产精品乱码久久久久| 欧美中文日韩| 成年人在线看片| 久久精品成人| mm1313亚洲国产精品无码试看| 欧美专区在线| 我看黄色一级片| 美女视频免费一区| 性生活免费在线观看| 久久99在线观看| 在线观看中文av| 国产精品亚洲午夜一区二区三区 | 宅男66日本亚洲欧美视频| 黄色在线视频观看网站| 亚洲新声在线观看| 午夜在线播放| 欧美精品在线网站| 狂野欧美性猛交xxxxx视频| 欧美精品videos另类日本| 国产中文在线播放| 国产成人av在线播放| 日韩漫画puputoon| 91久久国产精品91久久性色| 日本一区精品视频| 国产欧美一区二区三区另类精品| 麻豆成人入口| 日韩在线观看电影完整版高清免费| 91一区二区三区四区| 久久最新免费视频| 亚洲精品一级| 黄色片在线免费| 激情丁香综合五月| 成人免费看片载| 久久―日本道色综合久久| 国产激情av在线| 亚洲视频在线观看三级| 国产精品成人aaaa在线| 日本韩国精品在线| 国产孕妇孕交大片孕| 精品国产乱码久久久久久影片| 牛牛热在线视频| 久久不射热爱视频精品| 理论片午夜视频在线观看| 国产精品免费久久久久久| 亚洲高清在线一区| 欧美日韩综合精品| 91精品国产乱码久久久久久 | 久久av色综合| 国产精品日本精品| 国产精品对白久久久久粗| 日本一区视频在线| 欧美日本一区| 成人性视频欧美一区二区三区| 麻豆精品在线视频| 人体私拍套图hdxxxx| 国产精品不卡一区二区三区| 国产精彩视频在线| 欧美精三区欧美精三区| 日韩a在线看| 欧美大学生性色视频| 欧美日韩五区| 久久99久久精品国产| 91精品高清| 国产aaaaa毛片| 99国产精品99久久久久久| 午夜精品一区二区三区视频| 福利视频导航一区| a级片在线播放| 日韩中文av在线| 欧美第一视频| 国产一区精品在线| 欧美黄免费看| 色婷婷成人在线| 91蝌蚪porny| 日本亚洲色大成网站www久久| 欧美精品aⅴ在线视频| 激情福利在线| 91爱视频在线| 精品人人人人| 国产视频在线观看网站| 紧缚奴在线一区二区三区| 久久成人激情视频| 欧美性色19p| 日本黄色一区二区三区| 久久夜色精品亚洲噜噜国产mv| 电影亚洲一区| 日本午夜精品一区二区| 国产精品久久久久毛片大屁完整版| 在线观看欧美一区二区| 最新成人av在线| 亚洲综合精品视频| 在线视频中文亚洲| 亚洲天堂一区二区| 明星裸体视频一区二区| 一本久道久久综合狠狠爱| fc2成人免费视频| 亚洲午夜免费视频| 蜜桃91麻豆精品一二三区| 久久躁日日躁aaaaxxxx| 韩国三级成人在线| 久久视频免费在线| 国产一区二区三区四区五区入口| 综合 欧美 亚洲日本| 欧美日韩国产系列| 永久免费av片在线观看全网站| 国产精品旅馆在线| 日韩精品首页| 黄色永久免费网站| 亚洲视频一区在线| 精品久久久免费视频| 欧美国产中文字幕| 精品午夜电影| 亚洲熟妇av一区二区三区漫画| 91在线观看免费视频| 欧美一级特黄视频| 亚洲欧洲在线观看| 成人h在线观看| 无码毛片aaa在线| 国产高清不卡一区| 国产福利拍拍拍| 亚洲色图第三页| 青青在线精品| 国产一级大片免费看| 成人爽a毛片一区二区免费| 日韩手机在线观看| 国产一区二区三区中文| 欧美高清xxx| 人妻激情另类乱人伦人妻| 成人av电影免费观看| 丁香社区五月天| 北条麻妃久久精品| 哺乳一区二区三区中文视频| 自拍日韩亚洲一区在线| 久久精品亚洲精品国产欧美| 亚洲自拍偷拍另类| 久久久久国产精品一区| 亚洲三级网页| 在线一区二区不卡| 精品久久久久久电影| 最新电影电视剧在线观看免费观看| 91在线无精精品一区二区| 亚洲激情网址| 丁香六月激情综合| 亚洲福利在线看| 国产一区一一区高清不卡| 真人做人试看60分钟免费| 91在线观看污| 99在线精品视频免费观看软件| 91爱视频在线| 综合激情在线| 久久美女免费视频| 欧美tk丨vk视频| 国产精品麻豆成人av电影艾秋| 成人一区二区av| 国产色爱av资源综合区| 女人18毛片一区二区三区| 国产精品久久久久久网站|