0%

C++ 类模板中的静态成员

类模板中可以定义静态成员,从该类模板实例化得到的所有类都包含同样的静态成员。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
template<class T>
class A
{
private:
static int count;
public:
A() { count++; }
~A() { count--; }
A(A&) { count++; }
static void PrintCount() { cout << count << endl; }
};
template<> int A<int>::count = 0;
template<> int A<double>::count = 0;
int main()
{
A<int> ia;
A<double> da;
ia.PrintCount();
da.PrintCount();
return 0;
}

输出:

1
2
1
1

对静态成员在类外部加以声明是必需的。

A 和 A 是两个不同的类。虽然它们都有静态成员变量 count,但是显然,A 的对象 ia 和 A 的对象 da 不会共享一份 count。