如何在类模板中定义静态数据成员?

问题描述 投票:0回答:3

我想这样做:

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

但我不能,因为

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

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

c++ templates static static-members class-template
3个回答
248
投票

只需在标题中定义它:

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

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

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


81
投票

从 C++17 开始,您现在可以将静态成员声明为

inline
,这将在类定义中定义变量:

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

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


39
投票

这会起作用

template <typename T>
 struct S
 {

     static double something_relevant;
 };

 template<typename T>
 double S<T>::something_relevant=1.5;
© www.soinside.com 2019 - 2024. All rights reserved.