C++ "множественное определение" статической переменной в шаблонном классе
У меня есть класс с одним параметром шаблона и статической переменной:
/// file.h
template<typename T>
struct A
{
static int var;
};
Я хотел бы специализироваться var
но также иметь значение по умолчанию. Я попробовал это:
/// file.h
template<typename T>
int A<T>::var = 0;
/// file.cpp
template<> int A<int>::var = 1;
template<> int A<float>::var = 2;
// ...
Но в итоге у меня появилось несколько определений (специализированное и шаблонное, которое я думаю)
РЕДАКТИРОВАТЬ:
Я уже видел эти вопросы, по крайней мере, дважды, прежде чем задавать мои, они не решают мою проблему, так что вы могли бы быть так добры и действительно прочитать и попытаться ответить на мой вопрос вместо того, чтобы пометить его как дубликат на основании названия?
У меня нет проблем с определением шаблонного определения статической переменной, но я получаю ошибки, когда пытаюсь также специализировать ее (и, если я только специализирую ее, я получаю "неопределенную ссылку", когда я использую неспециализированный тип, конечно)
ОТВЕТ:
Решение состоит в том, чтобы объявить специализированную статическую переменную в заголовке, чтобы компилятор знал, что есть специализация, и не создает экземпляр по умолчанию:
/// file.h
template<typename T>
struct A
{
static int var;
};
template<typename T>
int A<T>::var = 0;
// Specialization
template<> int A<int>::var;
template<> int A<float>::var;
/// file.cpp
template<> int A<int>::var = 1;
template<> int A<float>::var = 2;
// ...