关于c ++:类模板中的静态成员初始化

Static member initialization in a class template

我想这样做:

1
2
3
4
5
6
template <typename T>
struct S
{
    ...
    static double something_relevant = 1.5;
};

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

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


只需在标题中定义它:

1
2
3
4
5
6
7
8
template <typename T>
struct S
{
    static double something_relevant;
};

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

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


这会起作用

1
2
3
4
5
6
7
8
9
template <typename T>
 struct S
 {

     static double something_relevant;
 };

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


由于C++ 17,现在可以将静态成员声明为EDCOX1(0),它将定义类定义中的变量:

1
2
3
4
5
6
template <typename T>
struct S
{
    ...
    static inline double something_relevant = 1.5;
};

现场:https://godbolt.org/g/bgsw1u