在之前的游戏开发中经常会用到各种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