C ++模板区分同一类型的typedef

时间:2016-11-07 08:48:30

标签: c++ templates typedef

我正在开发一款小游戏,它适用于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_IDtypedef long A_ID,我为getNewId()E_ID调用A_ID,他们都会获得他们的值相同生成的模板方法和变量。因此,虽然两者都应为0,但其中一个为0,另一个为1.

是否可以区分两种用户定义的类型?

0 个答案:

没有答案