C++類別別模板中的靜態成員

2020-07-16 10:04:24
類別範本中可以定義靜態成員,從該類別範本範例化得到的所有類都包含同樣的靜態成員。

程式範例如下:
#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
1

第 14 行和第 15 行,對靜態成員變數在類外部加以宣告是必需的。在 Visual Studio 2008 中,這兩行也可以簡單地寫成:

int A<int>::count = 0;
int A<double>::count = 0;

A<int> 和 A<double> 是兩個不同的類。雖然它們都有靜態成員變數 count,但是顯然,A<int> 的物件 ia 和 A<double> 的物件 da 不會共用一份 count。