我正在开发一款小游戏,它适用于typedef'd ids。我创建了一个静态id管理器类,如下所示:
class MetaIdManager{
template<typename T> static T _lastAssigned;
template<typename T> static std::queue<T> _freeIds;
public:
template<typename T> static void freeId(const T id){
_freeids.push(id);
}
template<typename T> static T getNewId(){
if(_freeIds<T>.empty()){
return _lastAssigned<T>++;
}
else {
T val = _freeIds<T>.front();
_freeIds<T>.pop();
return val;
}
}
template<typename T> static void reset(){
std::swap(_freeIds<T>, std::queue<T>());
_lastAssignedId<T> = 0;
}
};
template<typename T> T MetaIdManager::_lastAssigned = {};
template<typename T> std::queue<T> MetaIdManager::_freeIds = {};
如果我有两个typedef:typedef long E_ID
和typedef long A_ID
,我为getNewId()
和E_ID
调用A_ID
,他们都会获得他们的值相同生成的模板方法和变量。因此,虽然两者都应为0,但其中一个为0,另一个为1.
是否可以区分两种用户定义的类型?