Где определить статические переменные-члены const класса шаблона - PullRequest
3 голосов
/ 22 июня 2011

Согласно этому вопросу ответ :

According to the standards you must define i (который является статическим постоянным членом) outside of the class definition

... но если я сделаю это для статических переменных-членов const класса шаблона, которые сами являются общими, то я получу ошибки компоновки (аналогично получению ошибок компоновки, если код шаблона находится в отдельном модуле компиляции).Если я определю их в заголовке, ошибки компоновки исчезнут (я спросил, нормально ли было их определять generic, в первую очередь в этот вопрос ).

Безопасно ли то, что я делаю? Ниже приведено одно из определений статической переменной-члена const, которая находится в заголовке.

  template<typename T, unsigned int T_Size> 
  const Vector<T, T_Size> Vector<T, T_Size>::Zero = Vector<T, T_Size>(0);

Ответы [ 2 ]

6 голосов
/ 22 июня 2011

Статические данные-члены шаблона класса должны быть определены в заголовочном файле. Только когда вы определяете статические члены явно специализированного шаблона, вы должны определять их в файле реализации.

Другими словами, правило такое же, как и для функций-членов шаблонов классов.

2 голосов
/ 22 июня 2011

Поскольку полное определение шаблона необходимо в каждой единице перевода, да, это путь.

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