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;
// ...

0 ответов

Другие вопросы по тегам