1

我有SystemType一个类模板,它应该为每个系统提供唯一的 id。

//.h file:
extern atomic_counter MY_API s_nextSystemTypeId;

template <typename T>
class SystemType 
{
public:
    static unsigned getId();

private:
    static unsigned next();
};


template <typename T>
unsigned SystemType<T>::getId()
{
    static unsigned sysId = SystemType<T>::next();
    return sysId;
}

template <typename T>
unsigned SystemType<T>::next()
{
    return s_nextSystemTypeId++;
}

.

//.cpp file

atomic_counter s_nextSystemTypeId(0);

但是当它通过多个 DLL 使用时,此代码不起作用。在一个 dll 中:

SystemType<System1>::getId(); // = 0
SystemType<System2>::getId(); // = 1
SystemType<System1>::getId(); // = 0

但是在其他 dll 中使用时

SystemType<System1>::getId(); // = 2
SystemType<System2>::getId(); // = 3
SystemType<System1>::getId(); // = 2

如何只强制实例化一个模板类?

4

0 回答 0