c++ - 如何将模板类的静态成员变量声明/定义/初始化为类的静态成员变量?

标签 c++ templates static

我有以下代码:

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 重现该问题。)

如何将模板类的静态成员变量声明/定义/初始化为类的静态成员变量?

最佳答案

静态成员是根据其类定义的。 aA 的静态成员, a1a2B 的静态成员,你不能混淆它们的定义。

分别定义它们:

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 ;自 a1A<int> ,结果与 A<int>::a 相同.

关于c++ - 如何将模板类的静态成员变量声明/定义/初始化为类的静态成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40098277/

相关文章:

c++ - 如何从 C++ 中的列表/数组中随机选择一个数字?

c++ - 我的神经网络导致堆栈溢出

c++ - 使用 const 在 C++ 中进行模板特化

java - 从空变量访问静态变量

c++ - OpenCV - 查找轮廓图像的高度和宽度

c++ - 无法理解使用模板的函数定义

c++ - CArray<int, int> 和 CArray<int, int&> 有什么区别?

c - 让 gcc 内联并导出函数

groovy - 在 Groovy 脚本中导入内部枚举

C++ libPng 写一个透明背景的PNG