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

时间:2010-07-12 15:45:42

标签: c++ templates static

我想这样做:

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

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

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

3 个答案:

答案 0 :(得分:163)

只需在标题中定义:

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

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

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

答案 1 :(得分:30)

这将有效

template <typename T>
 struct S
 {

     static double something_relevant;
 };

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

答案 2 :(得分:14)

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

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

实时:https://godbolt.org/g/bgSw1u