Статическая членская инициализация в шаблоне класса

Я хотел бы сделать это:

template <typename T>
struct S
{
    ...
    static double something_relevant = 1.5;
};

но я не могу с тех пор something_relevant не имеет целочисленного типа. Это не зависит от T, но существующий код зависит от него являющийся статическим членом S.

Так как S является шаблоном, я не могу поместить определение в скомпилированном файле. Как я решаю эту проблему?

137
задан sbi 22 May 2013 в 13:50
поделиться

2 ответа

Просто определите его в заголовке:

template <typename T>
struct S
{
    static double something_relevant;
};

template <typename T>
double S<T>::something_relevant = 1.5;

Поскольку он является частью шаблона, как и все шаблоны, компилятор убедится, что он определен только один раз.

176
ответ дан 23 November 2019 в 23:34
поделиться

Это будет работать

template <typename T>
 struct S
 {

     static double something_relevant;
 };

 template<typename T>
 double S<T>::something_relevant=1.5;
31
ответ дан 23 November 2019 в 23:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: