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

小議c++之回調(diào)

   最近在做一個軍團系統(tǒng)的資料片開發(fā),因為策劃提出了很多遍歷某一軍團當(dāng)前所有在線玩家的操作(例如發(fā)公告、拉人、給獎勵),所以就想到了用回調(diào)。
   脫離實際項目代碼,先看一下示例實現(xiàn):
  1 /**
  2  *\author peakflys 
  3  *\brief C方式實現(xiàn)的C++回調(diào)
  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&);//成員函數(shù)
 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,不過后來再看相應(yīng)代碼時,越看越不順眼,尤其是類似于示例中的第57行:(this->*fun)(*it);  ,感覺使用很暴力,完全沒有OO的優(yōu)雅感,突然間想到了c++ TR1草案中的function和bind函數(shù)(c++11已經(jīng)將其轉(zhuǎn)正了)。
   于是重新實現(xiàn)回調(diào)功能,示例代碼如下:
  1 /**
  2  *\author peakflys 
  3  *\brief C++方式實現(xiàn)的C++回調(diào)
  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 }
本文使用的編譯環(huán)境是 gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46),c++11已經(jīng)把命名空間std::tr1下的函數(shù)賺到了std下。
這樣實現(xiàn),看起來就好很多了,可讀性也高了不少。新標(biāo)準(zhǔn)擴展的function和bind 功能挺強大的,用它來實現(xiàn)回調(diào)和委托還是很方便的。

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

評論

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

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

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

導(dǎo)航

統(tǒng)計

公告

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

常用鏈接

留言簿(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>
            先锋影音一区二区三区| 久久九九热re6这里有精品| 亚洲一二三级电影| 一区二区三区免费看| 亚洲精品资源| 一本色道久久88精品综合| 亚洲精选久久| 国产精品99久久久久久久vr| 中文精品视频| 午夜精品久久久久久久白皮肤| 亚洲综合电影一区二区三区| 欧美在线关看| 欧美大色视频| 亚洲乱码久久| 久久精品av麻豆的观看方式| 美女在线一区二区| 欧美视频一区在线观看| 国内久久精品| 亚洲香蕉伊综合在人在线视看| 久久国产精品一区二区三区四区| 欧美国产亚洲视频| 亚洲少妇自拍| 老司机凹凸av亚洲导航| 国产精品成人一区二区三区吃奶 | 一区国产精品| 日韩一级精品| 另类图片综合电影| 亚洲天堂男人| 欧美+日本+国产+在线a∨观看| 国产精品扒开腿做爽爽爽视频 | 欧美色图天堂网| 激情另类综合| 欧美一级在线亚洲天堂| 91久久精品国产91久久性色tv| 亚洲网友自拍| 欧美日韩1区2区| 黄色亚洲免费| 欧美一二三视频| 亚洲狼人精品一区二区三区| 久久久久久噜噜噜久久久精品| 欧美午夜精品一区| 亚洲精品一区二区三区四区高清| 性久久久久久| 亚洲一区二区三区涩| 欧美日韩一区二区三| 日韩视频专区| 永久免费视频成人| 亚洲免费网址| 亚洲精品一区在线| 欧美r片在线| 在线不卡欧美| 久久一本综合频道| 欧美影片第一页| 国产一区二区在线观看免费| 亚洲欧美另类在线观看| 在线视频日韩| 国产精品大片wwwwww| 亚洲婷婷综合久久一本伊一区| 亚洲日韩成人| 欧美日韩精品二区| 一区二区三区你懂的| 亚洲国产小视频| 美女露胸一区二区三区| 欧美一区在线直播| 国产一区二区电影在线观看| 欧美一区二区三区视频免费播放| 在线午夜精品自拍| 国产精品高潮视频| 欧美一区二区三区四区夜夜大片| 亚洲一二三级电影| 国产一区二区在线观看免费| 久久久久国产一区二区三区四区| 欧美一区二区观看视频| 韩国一区二区三区在线观看| 久久久久国产精品人| 欧美在线免费观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 美国三级日本三级久久99| 欧美一区二区网站| 亚洲电影在线免费观看| 欧美国产一区二区| 欧美人成在线| 久久本道综合色狠狠五月| 欧美专区在线观看一区| 亚洲精品国产无天堂网2021| 亚洲免费成人| 国产一区二区三区四区hd| 欧美福利视频在线| 国产精品国内视频| 蜜桃av噜噜一区| 欧美性视频网站| 农夫在线精品视频免费观看| 欧美精品一区在线播放| 久久国产福利| 欧美日韩国产高清| 亚洲成人资源| 亚洲精品一区中文| 国内精品久久国产| 日韩视频免费在线| 国产综合网站| 一区二区精品在线观看| 亚洲一区二区不卡免费| 国外视频精品毛片| 99在线精品观看| 激情久久中文字幕| 国产精品99久久久久久www| 黄网动漫久久久| 亚洲一区二区日本| aⅴ色国产欧美| 久久久中精品2020中文| 亚洲一区二区影院| 欧美精品一区二区三区蜜桃| 久久人人爽人人爽爽久久| 国产精品激情电影| 亚洲精品少妇30p| 亚洲国产精品va在线看黑人动漫| 中文一区二区| 亚洲一区二区三区四区五区黄| 久久久综合精品| 久久精品视频播放| 国产欧美一区二区精品仙草咪| 亚洲精品国产精品乱码不99按摩| 亚洲成人自拍视频| 久久精品欧洲| 美脚丝袜一区二区三区在线观看| 国产欧美日韩激情| 亚洲欧美99| 久久成人18免费网站| 国产精品日日做人人爱| 一本色道久久综合一区| 一区二区日本视频| 欧美人与禽猛交乱配视频| 亚洲高清自拍| 亚洲国产欧美一区二区三区久久| 久久久久久久久久久成人| 久久久久久久久久久久久9999| 国产午夜精品理论片a级探花 | 99亚洲一区二区| 欧美日本二区| 一本色道精品久久一区二区三区| 99pao成人国产永久免费视频| 欧美承认网站| 亚洲精品影视在线观看| 亚洲午夜精品一区二区三区他趣| 欧美日韩一二区| 亚洲一区二区在| 久久久视频精品| 亚洲国产天堂久久国产91| 欧美jjzz| 亚洲桃花岛网站| 久久精品官网| 亚洲人成小说网站色在线| 欧美另类一区二区三区| 亚洲一品av免费观看| 久久久国产一区二区| 永久域名在线精品| 欧美日韩精品免费| 中文国产成人精品久久一| 久久精视频免费在线久久完整在线看| 国产一区再线| 欧美高清在线视频观看不卡| 99re亚洲国产精品| 久久精品中文字幕一区| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲国产精品久久精品怡红院| 99riav久久精品riav| 欧美亚洲一区二区三区| 麻豆av一区二区三区| 一区二区日韩免费看| 国产午夜精品久久久久久免费视| 久久久久久午夜| 99精品国产在热久久下载| 久久国产精品亚洲va麻豆| 亚洲理伦电影| 黄色亚洲免费| 欧美午夜免费电影| 老司机午夜精品| 亚洲欧美日韩在线| 亚洲黄网站黄| 久久精品中文字幕一区二区三区| 亚洲精品孕妇| 国语自产精品视频在线看一大j8| 欧美日韩国产123| 久久人人爽爽爽人久久久| 亚洲自拍高清| 亚洲精品网站在线播放gif| 久久久久国产精品一区| 在线亚洲成人| 亚洲人体影院| 伊人久久综合97精品| 国产精品午夜在线观看| 欧美日韩国内自拍| 欧美成人综合| 暖暖成人免费视频| 久久九九免费| 欧美中文字幕视频| 亚洲尤物影院| 亚洲视频在线播放| 亚洲美女色禁图| 最新日韩在线|