青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

小議c++之回調

   最近在做一個軍團系統的資料片開發,因為策劃提出了很多遍歷某一軍團當前所有在線玩家的操作(例如發公告、拉人、給獎勵),所以就想到了用回調。
   脫離實際項目代碼,先看一下示例實現:
  1 /**
  2  *\author peakflys 
  3  *\brief C方式實現的C++回調
  4  
*/
  5 #include <iostream>
  6 #include <vector>
  7 
  8 #define COUNTARRAY(a) sizeof(a)/sizeof(a[0])
  9 
 10 class User
 11 {
 12     public:
 13         User(std::string _name,bool _online) : name(_name),online(_online)
 14         {
 15         }
 16         const std::string& getName() const
 17         {
 18             return this->name;
 19         }
 20         bool checkOnLine()
 21         {
 22             return online;
 23         }
 24     private:
 25         std::string name;
 26         bool online;
 27 };
 28 
 29 class Test;
 30 typedef void(Test::*pFun)(const User&);//成員函數
 31 
 32 class Test
 33 {
 34     public:
 35         Test(const std::vector<User>& _userList) : userList(_userList)
 36         {
 37         }
 38 
 39         void print(const User& user);
 40 

 41         void execEvery(pFun fun);
 42 
 43     private:
 44         std::vector<User> userList;
 45 };
 46 
 47 void Test::print(const User& user)
 48 {
 49     std::cout<<user.getName()<<" ";
 50 }
 51 
 52 void Test::execEvery(pFun fun)
 53 {
 54     for(std::vector<User>::iterator it=userList.begin();it!=userList.end();++it)
 55     {
 56         if((*it).checkOnLine())
 57             (this->*fun)(*it); //注意格式
 58     }
 59     std::cout<<std::endl;
 60 }
 61 
 62 int main()
 63 {
 64     User um[] = {User("張三",true),User("李四",false),User("王二",true),User("麻子",true)};
 65     std::vector<User> vu(um,um+COUNTARRAY(um));
 66     Test t(vu);
 67     t.execEvery(&Test::print);
 68     return 0;
 69 }
寫完之后編譯、運行,一切okay,不過后來再看相應代碼時,越看越不順眼,尤其是類似于示例中的第57行:(this->*fun)(*it);  ,感覺使用很暴力,完全沒有OO的優雅感,突然間想到了c++ TR1草案中的function和bind函數(c++11已經將其轉正了)。
   于是重新實現回調功能,示例代碼如下:
  1 /**
  2  *\author peakflys 
  3  *\brief C++方式實現的C++回調
  4  
*/
  5 #include <iostream>
  6 #include <vector>
  7 #include <tr1/functional>
  8 
  9 #define COUNTARRAY(a) sizeof(a)/sizeof(a[0])
 10 
 11 class User
 12 {
 13     public:
 14         User(std::string _name,bool _online) : name(_name),online(_online)
 15         {
 16         }
 17         const std::string& getName() const
 18         {
 19             return this->name;
 20         }
 21         bool checkOnLine()
 22         {
 23             return online;
 24         }
 25     private:
 26         std::string name;
 27         bool online;
 28 };
 29 
 30 class Test
 31 {
 32     public:
 33         Test(const std::vector<User>& _userList) : userList(_userList)
 34         {
 35         }
 36 
 37         void static print(const User& user);
 38 
 39         void execEvery(std::tr1::function<void (const User&)> func);
 40     private:
 41         std::vector<User> userList;
 42 };
 43 
 44 void Test::print(const User& user)
 45 {
 46     std::cout<<user.getName()<<" ";
 47 }
 48 
 49 void Test::execEvery(std::tr1::function<void (const User&)> func)
 50 {
 51     for(std::vector<User>::iterator it=userList.begin();it!=userList.end();++it)
 52     {
 53         if((*it).checkOnLine())
 54             func(*it); //注意格式
 55     }
 56     std::cout<<std::endl;
 57 }
 58 
 59 int main()
 60 {
 61     User um[] = {User("張三",true),User("李四",false),User("王二",true),User("麻子",true)};
 62     std::vector<User> vu(um,um+COUNTARRAY(um));
 63     Test t(vu);
 64     t.execEvery(std::tr1::bind(Test::print,std::tr1::placeholders::_1));
 65     return 0;
 66 }
本文使用的編譯環境是 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46),c++11已經把命名空間std::tr1下的函數賺到了std下。
這樣實現,看起來就好很多了,可讀性也高了不少。新標準擴展的function和bind 功能挺強大的,用它來實現回調和委托還是很方便的。

posted on 2012-08-31 21:38 peakflys 閱讀(2935) 評論(1)  編輯 收藏 引用 所屬分類: C++

評論

# re: 小議c++之回調[未登錄] 2012-09-03 14:10 陳梓瀚(vczh)

只要你用的是VC++2008或者以上,就可以有std::tr1::function或者std::function,請不要浪費時間考慮別的方法,除非你的callback是一個包含多個method的類似template method pattern一樣的callback接口  回復  更多評論   

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

公告

人不淡定的時候,就愛表現出來,敲代碼如此,偶爾的靈感亦如此……

常用鏈接

留言簿(4)

隨筆分類

隨筆檔案

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            91久久精品国产91久久性色| 亚洲免费人成在线视频观看| 久久五月天婷婷| 午夜精品三级视频福利| 国产午夜亚洲精品羞羞网站 | 欧美成人官网二区| 亚洲国产精品一区二区第一页 | 玖玖玖免费嫩草在线影院一区| 亚洲欧美一级二级三级| 国产一区二区三区高清在线观看| 久久免费观看视频| 女人香蕉久久**毛片精品| 亚洲美女免费精品视频在线观看| 最新成人在线| 欧美日韩在线免费观看| 亚洲综合99| 久久精品日韩欧美| 亚洲精品中文字幕有码专区| 亚洲精品专区| 国产欧美一区二区三区久久| 蜜臀a∨国产成人精品| 欧美啪啪一区| 午夜精品视频| 久久久精品五月天| 亚洲一区二区四区| 久久久久九九九九| 日韩午夜在线观看视频| 亚洲在线一区| 亚洲靠逼com| 香蕉成人久久| 亚洲最新在线视频| 久久精品国产99国产精品| 亚洲精品视频在线播放| 欧美亚洲视频在线看网址| 亚洲精品在线观看视频| 欧美一级视频| 一区二区三区成人| 久久九九国产精品| 亚洲欧美日韩国产成人| 美女脱光内衣内裤视频久久网站| 欧美一级欧美一级在线播放| 欧美大片免费| 久久久人成影片一区二区三区| 欧美日韩精品一区二区三区四区| 久久久久久久久久久久久久一区 | 美女网站久久| 欧美在线观看网站| 欧美日韩www| 欧美激情中文字幕一区二区| 国外成人在线视频| 亚洲免费在线看| 亚洲视频一区在线| 欧美va天堂在线| 久久青草欧美一区二区三区| 国产精品久久久久一区二区三区共| 免费h精品视频在线播放| 国产色视频一区| 亚洲无线视频| 午夜精品国产更新| 欧美三级视频| 日韩一级大片| 一区二区三区国产在线观看| 欧美高清视频一二三区| 亚洲国产黄色片| **网站欧美大片在线观看| 欧美在线视频播放| 久久久人成影片一区二区三区| 国产日本亚洲高清| 欧美一级午夜免费电影| 午夜欧美精品| 国产亚洲成年网址在线观看| 亚洲欧美日产图| 久久久av水蜜桃| 激情欧美亚洲| 欧美本精品男人aⅴ天堂| 亚洲第一区色| 在线午夜精品| 国产精品免费视频观看| 亚洲一线二线三线久久久| 欧美一区二视频在线免费观看| 国产婷婷97碰碰久久人人蜜臀| 欧美一区三区二区在线观看| 久久人人九九| 亚洲理论在线观看| 欧美午夜a级限制福利片| 亚洲一区二区三区在线视频| 欧美在线观看视频一区二区三区| 国产综合久久| 欧美激情1区2区| 一区二区电影免费观看| 久久激情综合| 亚洲日本va在线观看| 欧美日本三级| 香蕉久久a毛片| 欧美wwwwww| 亚洲永久免费av| 国产一区二区三区四区老人| 蜜臀av国产精品久久久久| 亚洲精品视频免费观看| 欧美在线观看视频一区二区三区 | 国外成人性视频| 欧美aⅴ一区二区三区视频| 一本色道久久99精品综合| 欧美一区二区视频免费观看| 亚洲第一中文字幕在线观看| 欧美日韩三级| 久久久夜精品| 亚洲一区二区综合| 欧美顶级艳妇交换群宴| 午夜精品久久久久久久蜜桃app| 在线看一区二区| 国产精品成av人在线视午夜片 | 亚洲国产精彩中文乱码av在线播放| 一本久道久久久| 黄色精品一区| 国产精品高潮呻吟久久av黑人| 久久av免费一区| 一区二区高清在线观看| 欧美国产激情二区三区| 久久动漫亚洲| 亚洲在线观看视频网站| 亚洲欧洲精品成人久久奇米网| 国产精品美女主播在线观看纯欲| 蜜臀va亚洲va欧美va天堂 | 欧美激情在线观看| 久久精品99久久香蕉国产色戒| 亚洲神马久久| 亚洲三级色网| 亚洲国产精品一区二区久| 国产欧美日本在线| 欧美亚洲第一页| 欧美日韩国产在线一区| 欧美α欧美αv大片| 久久夜色精品一区| 久久精品日产第一区二区三区| 亚洲一区二区欧美| 中文一区二区在线观看| 亚洲另类自拍| 亚洲伦理中文字幕| 亚洲国产欧美不卡在线观看| 欧美sm极限捆绑bd| 免费成人av资源网| 美国十次成人| 免费短视频成人日韩| 老司机成人在线视频| 美国十次了思思久久精品导航| 久久久综合网| 久久亚洲捆绑美女| 嫩草成人www欧美| 免费视频亚洲| 亚洲激情黄色| 日韩视频一区二区三区在线播放| 亚洲精品影院在线观看| 99精品视频免费观看| 日韩视频中文字幕| 一本久道久久综合狠狠爱| 一区二区成人精品 | 免费91麻豆精品国产自产在线观看| 久久久久久久久久久一区| 久久蜜臀精品av| 欧美波霸影院| 亚洲三级免费| 亚洲一区二区三区精品动漫| 亚洲欧美色婷婷| 久久精品一本| 欧美精品成人| 国产精品日韩精品欧美在线| 国产亚洲精品久久久久久| 一区二区三区在线视频观看 | 欧美日韩精品国产| 国产精品第三页| 国产一区在线免费观看| 亚洲国产精品一区制服丝袜| 99国产精品一区| 香蕉久久夜色精品国产| 鲁鲁狠狠狠7777一区二区| 亚洲欧洲另类| 午夜亚洲性色视频| 欧美3dxxxxhd| 国产乱肥老妇国产一区二 | 国产精品一区二区你懂的| 精品电影在线观看| 中文网丁香综合网| 久久伊伊香蕉| 亚洲深夜福利| 久久综合狠狠综合久久综合88| 欧美精品首页| 韩国女主播一区| 亚洲午夜精品17c| 久久综合色一综合色88| 99国产精品国产精品久久| 久久免费视频观看| 国产精品亚洲成人| 亚洲伦伦在线| 牛夜精品久久久久久久99黑人| 亚洲午夜久久久| 欧美激情片在线观看| 伊人久久婷婷色综合98网| 午夜精品福利一区二区蜜股av| 亚洲黄色在线|