C ++ Шаблоны классов создаются дважды - PullRequest
0 голосов
/ 29 июня 2018

Я работал над способом получения уникального идентификатора для некоторых из моих классов, поэтому сейчас я работаю над следующим подходом:

//id_object.h

class DR_UTIL_EXPORT IDBase
{
 public:
  static UInt32
  getNextID();
};

template<class T>
class IDClass
{
public:
  static const UInt32 ID;
};

template<class T>
const UInt32 IDClass<T>::ID = IDBase::getNextID();

//id_object.cpp

UInt32
IDBase::getNextID() {
  static UInt32 nextID = 0;
  return nextID++;
}

но проблема в том, что это не работает должным образом, по некоторым причинам есть классы, которые создаются дважды. Эти функции используются в 2 разных проектах (один - dll, а другой - exe).

Например на Core.dll

IDClass<A>::ID == 0

но включен Application.exe

IDClass<A>::ID == 8

A - это класс, определенный в Core.dll

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...