• <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>
            Cpper
            C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
            在蓋莫游戲引擎的書寫過程中先后書寫了資源管理器,場景管理器,模型管理器等管理器類.之后感覺很有必要寫一個泛型的管理器類了.這個可以少做一些重復性的工作了。
            管理器類無非就是獲取當前對象個數,對象生成,對象按名索取等等
            經過考慮,草料書寫如下:
             1 namespace core
             2 {
             3 
             4 ////////////////////////////////////////////////////////////
             5 //! 定義引擎泛型管理器類
             6 //////////////////////////////////////////////////////////// 
             7 template<class Obj = Object, class Type = std::string>
             8 class Manager  
             9 {        
            10 public:     
            11     typedef Type                                          ThisType;
            12     typedef Obj                                           ThisObj;
            13     typedef std::map<ThisType,RefPtr<ThisObj> >           Table;
            14     //! typedef std::map<ThisType,RefPtr<ThisObj> >::iterator TableItr; 
            15     
            16     ////////////////////////////////////////////////////////
            17     //! 構造,析構場景管理器
            18     //////////////////////////////////////////////////////// 
            19     Manager(){}
            20     virtual ~Manager() = 0
            21 public:     
            22                                           
            23     ////////////////////////////////////////////////////////////
            24     /// 獲取當前管理器中的對象個數
            25     ////////////////////////////////////////////////////////////                                         
            26     inline uint32 GetObjectNumber()const{return objects.size();}
            27     
            28     ////////////////////////////////////////////////////////////
            29     /// 檢測當前管理器中是否存在對象
            30     ////////////////////////////////////////////////////////////      
            31     inline bool   HasObject()const{return !objects.empty();}
            32     
            33     ////////////////////////////////////////////////////////////
            34     /// 獲取給定索引的對象(如果對象不存在則生成一個新的對象)
            35     ////////////////////////////////////////////////////////////       
            36     inline RefPtr<Object> GetObject(const Type& name)
            37     {
            38         if(objects.find(name) != objects.end())
            39             return objects[name];
            40         return     NULL;
            41     }
            42     
            43     ////////////////////////////////////////////////////////////
            44     /// 生成一個新的對象
            45     ////////////////////////////////////////////////////////////     
            46     virtual RefPtr<ThisObj> CreateObject(const Type& name) = 0
            47     
            48     ////////////////////////////////////////////////////////////
            49     /// 銷毀指定名字的對象
            50     ////////////////////////////////////////////////////////////
            51     inline bool KillObject(const Type& name)
            52     {    
            53         std::map<std::string,RefPtr<Model> >::iterator itr = objects.find(name);
            54         if(itr == objects.end())
            55             return false;
            56         objects.erase(name);
            57         return NULL;         
            58     }     
            59 
            60     ////////////////////////////////////////////////////////////
            61     /// 管理器對象清空
            62     ////////////////////////////////////////////////////////////    
            63     inline void ClearObject(){objects.clear();}
            64 protected:
            65     Table    objects;     
            66 };
            67 
            68 template<class Obj, class Type>
            69 Manager<Obj,Type>::~Manager()
            70 {
            71     ClearObject();                      
            72 
            73 
            其中使用std::map作為基本的管理器容器
            同時其中CreateObject函數是一個虛擬函數需要重載之
            然后我們就可以這樣寫具體的的管理器了.
            比如:
            1 class ModelManager : public Manager<Model,std::string>
            2 {
            3 public:
            4      RefPtr<Model> CreateObject(const std::string &);    
            5 };



            posted on 2010-03-08 20:49 ccsdu2009 閱讀(1272) 評論(8)  編輯 收藏 引用 所屬分類: Game引擎
            Comments
            • # re: 蓋莫游戲引擎中的范管理器類
              ccsdu2009
              Posted @ 2010-03-08 20:53
              ////////////////////////////////////////////////////////////
              49 /// 銷毀指定名字的對象
              50 ////////////////////////////////////////////////////////////
              51 inline bool KillObject(const Type& name)
              52 {
              53 std::map<std::string,RefPtr<Model> >::iterator itr = objects.find(name);
              54 if(itr == objects.end())
              55 return false;
              56 objects.erase(name);
              57 return true;
              58 }   回復  更多評論   
            • # re: 蓋莫游戲引擎中的范管理器類
              陳梓瀚(vczh)
              Posted @ 2010-03-09 00:32
              跟一個map沒區別……  回復  更多評論   
            • # re: 蓋莫游戲引擎中的范管理器類
              東北證券官方網站
              Posted @ 2010-03-09 02:08
              收藏了。。。





              http://www.keybeta.com/quote/  回復  更多評論   
            • # re: 蓋莫游戲引擎中的范管理器類
              凡客領帶
              Posted @ 2010-03-09 10:00
              很好12363546+6.36552  回復  更多評論   
            • # re: 蓋莫游戲引擎中的范管理器類
              cui
              Posted @ 2010-03-09 10:20
              你這效率也太低了吧

              36 inline RefPtr<Object> GetObject(const Type& name)
              37 {
              38 itertor itor = objects.find(name);
              if (itor != objects.end())
              39 return itor->second;
              40 return RefPtr<Object>() ;
              41 }


              inline bool KillObject(const Type& name)
              52 {
              53 return objects.erase (name) > 0;
              58 }   回復  更多評論   
            • # re: 蓋莫游戲引擎中的范管理器類
              ccsdu2009
              Posted @ 2010-03-09 10:58
              @cui
              謝謝
              完成功能是第一要務
              效率是其次的  回復  更多評論   
            • # re: 蓋莫游戲引擎中的范管理器類
              cui
              Posted @ 2010-03-09 15:20
              @ccsdu2009

              強詞奪理! 這種代碼需要費神的思考嗎?比你的舊代碼行數多嗎?  回復  更多評論   
            • # re: 蓋莫游戲引擎中的范管理器類
              ccsdu2009
              Posted @ 2010-03-09 15:51
              map的erase有三個版本
               1 關于map的erase
               2       void
               3       erase(iterator __position)
               4       { _M_t.erase(__position); }
               5 
               6       /**
               7        *  @brief Erases elements according to the provided key.
               8        *  @param  x  Key of element to be erased.
               9        *  @return  The number of elements erased.
              10        *
              11        *  This function erases all the elements located by the given key from
              12        *  a %map.
              13        *  Note that this function only erases the element, and that if
              14        *  the element is itself a pointer, the pointed-to memory is not touched
              15        *  in any way.  Managing the pointer is the user's responsibilty.
              16        */
              17       size_type
              18       erase(const key_type& __x)
              19       { return _M_t.erase(__x); }
              20 
              21       /**
              22        *  @brief Erases a [first,last) range of elements from a %map.
              23        *  @param  first  Iterator pointing to the start of the range to be
              24        *                 erased.
              25        *  @param  last  Iterator pointing to the end of the range to be erased.
              26        *
              27        *  This function erases a sequence of elements from a %map.
              28        *  Note that this function only erases the element, and that if
              29        *  the element is itself a pointer, the pointed-to memory is not touched
              30        *  in any way.  Managing the pointer is the user's responsibilty.
              31        */
              32       void
              33       erase(iterator __first, iterator __last)
              34       { _M_t.erase(__first, __last); }
              我以前只注意到map.erase(itr);
              謝謝提醒O(∩_∩)O~
                回復  更多評論   
             
            久久久精品人妻一区二区三区蜜桃| 久久精品国产只有精品66| 久久福利青草精品资源站免费| 欧美丰满熟妇BBB久久久| 国内精品久久久久影院亚洲| 久久久国产打桩机| 伊人久久免费视频| 亚洲人成无码网站久久99热国产 | 精品99久久aaa一级毛片| 久久久久这里只有精品| 伊人久久大香线蕉AV色婷婷色| 久久永久免费人妻精品下载| .精品久久久麻豆国产精品 | 久久AⅤ人妻少妇嫩草影院| 国产成人精品久久一区二区三区| 国内精品久久久久久久亚洲| 伊人精品久久久久7777| 欧美日韩中文字幕久久伊人| 久久精品中文字幕大胸| MM131亚洲国产美女久久| 一级女性全黄久久生活片免费 | 青青青伊人色综合久久| 久久九色综合九色99伊人| 婷婷五月深深久久精品| 欧美久久综合九色综合| 久久综合久久综合久久| 天天躁日日躁狠狠久久| 欧美性大战久久久久久| 国产高清美女一级a毛片久久w| 国产偷久久久精品专区| 欧美久久精品一级c片片| 国产成人精品综合久久久久 | 香港aa三级久久三级| 国产偷久久久精品专区| 久久亚洲av无码精品浪潮| 国产精品内射久久久久欢欢| 97久久精品无码一区二区| 久久人妻少妇嫩草AV无码专区| 日韩精品无码久久久久久| 久久人人爽人人人人片av| 亚洲AV成人无码久久精品老人|