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

我想这样做:

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

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

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

只需在标题中定义它:

 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;