Ale*_* C. 138 c++ static templates
我想这样做:
template <typename T>
struct S
{
...
static double something_relevant = 1.5;
};
Run Code Online (Sandbox Code Playgroud)
但我不能因为something_relevant
不是整体类型.它不依赖于T
,但现有代码依赖于它是静态成员S
.
由于S是模板,我不能将定义放在编译文件中.我该如何解决这个问题?
sbi*_*sbi 177
只需在标题中定义它:
template <typename T>
struct S
{
static double something_relevant;
};
template <typename T>
double S<T>::something_relevant = 1.5;
Run Code Online (Sandbox Code Playgroud)
因为它是模板的一部分,所以与所有模板一样,编译器将确保它只定义一次.
Pra*_*rav 31
这会奏效
template <typename T>
struct S
{
static double something_relevant;
};
template<typename T>
double S<T>::something_relevant=1.5;
Run Code Online (Sandbox Code Playgroud)
xax*_*xon 25
从C++ 17开始,您现在可以声明静态成员inline
,它将在类定义中定义变量:
template <typename T>
struct S
{
...
static inline double something_relevant = 1.5;
};
Run Code Online (Sandbox Code Playgroud)
live:https://godbolt.org/g/bgSw1u