我有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
如何只强制实例化一个模板类?