类模板中的静态成员初始化

我想这样做:

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

但是我不能,因为 something_relevant不是整型的。它不依赖于 T,但是现有的代码依赖于它是 S的静态成员。

因为 S 是模板,所以我不能把定义放在一个已编译的文件中。我如何解决这个问题?

105694 次浏览

只需在标题中定义它:

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


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

因为它是模板的一部分,所以与所有模板一样,编译器将确保它只定义一次。

会成功的

template <typename T>
struct S
{


static double something_relevant;
};


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

因为 C + + 17,您现在可以声明静态成员为 inline,它将在类定义中定义变量:

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

现场直播: https://godbolt.org/g/bgSw1u