私は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 で使用すると機能しません。1 つの 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
インスタンス化されたテンプレート クラスを 1 つだけ強制するにはどうすればよいですか?