通用Manager模版类

     在之前的游戏开发中经常会用到各种Manager,比如PlayerManager , UIManager , NpcManager,我都写了不下数十个了,每次写都觉的很烦很机械化,其实很多Manager功能都是差不多的,不同的只是管理的数据不一样,<C++ Templates>这本书可不能白看呀,不能放弃这个C++中最强大的功能,于是试着写了一个模版,感觉挺好用的,可惜之前那几十个Manager了.

     目前功能还很单一,添加删除获取,还融合了一个迭代模式方便遍例,以后会考虑在写几个特化,比如支持vector,List,Hash什么的......

 

 

/*-----------------------------------------------------------------------------------------------------------------

map数据结构管理器 模版类

Author: 苗琳

Date: 2009-8-5

Update:

----------------------------------------------------------------------------------------------------------------**/
#ifndef _MapManager_hpp__
#define _MapManager_hpp__

#include <map>
 
template < typename idType , typename dataType >
class MapManager
{
public:

 MapManager(){};
 ~MapManager(){};

 dataType* createObject(const idType& name , dataType* pData)
 {
  std::map<idType , dataType*>::iterator itr = mObjectList.find(name);
  if (itr == mObjectList.end())
  {
   mObjectList[name] = pData;
   return pData;
  }
  else
  {
   return itr->second;
  }
 }
 bool deleteObject(const idType& name)
 {
  std::map<idType , dataType*>::iterator itr = mObjectList.find(name);
  if (itr != mObjectList.end())
  {
   delete itr->second;
   mObjectList.erase(itr);
   return true;
  }
  else
  {
   return false;
  }
 }
 bool hasObject(const idType& name)
 {
  std::map<idType , dataType*>::iterator itr = mObjectList.find(name);
  if (itr != mObjectList.end())
  {
   return true;
  }
  else
  {
   return false;
  }
 }
 dataType* getObject(const idType& name)
 {
  std::map<idType , dataType*>::iterator itr = mObjectList.find(name);
  if (itr != mObjectList.end())
  {
   return itr->second;
  }
  else
  {
   return NULL;
  }
 }
 void deleteAllObject()
 {
  std::map<idType , dataType*>::iterator itr = mObjectList.begin();
  while (itr != mObjectList.end())
  {
   delete itr->second;
   ++itr;
  }
  mObjectList.clear();
 }

 迭代模式//

 dataType* first()
 {
  mCurIter = mObjectList.begin();
  if (mCurIter == mObjectList.end())
  {
   return NULL;
  }
  else
  {
   return mCurIter->second;
  }
 }

 dataType* next()
 {
  mCurIter++;
  if (mCurIter != mObjectList.end())
  {
   return mCurIter->second;
  }
  else
  {
   return NULL;
  }
 }
 

private:
 std::map<idType , dataType*> mObjectList;
 typename std::map< idType ,  dataType*>::iterator mCurIter;
};
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值