Инициализация статического члена в шаблоне класса
Я хотел бы сделать это:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
но я не могу, так как something_relevant
не имеет интегрального типа. Он не зависит от T
, но существующий код зависит от того, что он является статическим членом S
.
Поскольку S является шаблоном, я не могу поместить определение внутри скомпилированного файла. Как решить эту проблему?
Ответы
Ответ 1
Просто определите его в заголовке:
template <typename T>
struct S
{
static double something_relevant;
};
template <typename T>
double S<T>::something_relevant = 1.5;
Поскольку он является частью шаблона, как и для всех шаблонов, компилятор будет удостовериться, что он определен только один раз.
Ответ 2
Это будет работать
template <typename T>
struct S
{
static double something_relevant;
};
template<typename T>
double S<T>::something_relevant=1.5;
Ответ 3
Начиная с С++ 17, теперь вы можете объявить статический член inline
, который определит переменную в определении класса:
template <typename T>
struct S
{
...
static inline double something_relevant = 1.5;
};
live: https://godbolt.org/g/bgSw1u