我有以下代码:
template <typename T>
class A {
public:
static int a;
};
class B {
public:
static A<int> a1;
static A<double> a2;
};
int B::a1::a = 0; --> It gives an error "a1 is not a class, namespace, enumeration"
(我在 XCode 中使用 llvm 编译器。我也可以使用 gcc 重现该问题。)
如何将模板类的静态成员变量声明/定义/初始化为类的静态成员变量?
最佳答案
静态成员是根据其类定义的。 a
是 A
的静态成员, a1
和a2
是 B
的静态成员,你不能混淆它们的定义。
分别定义它们:
template <typename T>
int A<T>::a = 0;
A<int> B::a1;
A<double> B::a2;
如果您希望模板专门化 A<T>::a
的定义,它看起来像:
template <typename T>
int A<T>::a = 0;
template <typename T>
int A<int>::a = 1;
template <typename T>
int A<double>::a = 2;
然后是A<int>::a
初始值为 1
,对于A<double>::a
将是2
,对于其他类型,如 A<char>::a
它将是 0
。请注意,这些定义仍然独立于类 B
的定义。 .
如果您想访问a
来自B::a1
,你可以写B::a1.a
;自 a1
是 A<int>
,结果与 A<int>::a
相同.
关于c++ - 如何将模板类的静态成员变量声明/定义/初始化为类的静态成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098277/