我想这样做:
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;
由于它是模板的一部分,与所有模板一样,编译器将确保它只定义一次。
从 C++17 开始,您现在可以将静态成员声明为
inline
,这将在类定义中定义变量:
template <typename T>
struct S
{
...
static inline double something_relevant = 1.5;
};
这会起作用
template <typename T>
struct S
{
static double something_relevant;
};
template<typename T>
double S<T>::something_relevant=1.5;