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 で使用すると機能しません。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 つだけ強制するにはどうすればよいですか?

4

0 に答える 0