我想这样做:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
但我不能,因为 something_relevant
不是整数类型。它不依赖于 T
,但现有代码依赖于它是 S
的静态成员。
由于 S 是模板,我不能将定义放在编译文件中。我该如何解决这个问题?
std::string
类型
只需在标题中定义它:
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;
};
直播:https://godbolt.org/g/bgSw1u
这将起作用
template <typename T>
struct S
{
static double something_relevant;
};
template<typename T>
double S<T>::something_relevant=1.5;
template<typename T> double S<T>::something_relevant=1.5;)
编译器抛出错误。你能告诉我是什么原因吗?
不定期副业成功案例分享
<goes_playing>
哇,当我将鼠标悬停在你的名字上时,我看到了你的代表!我也不知道那个。 @Prasoon:不,你是对的,我反复到达现在的位置。 (这就是为什么我对你的答案投了赞成票,顺便说一句。)