C++類別別模板中的非型別引數

2020-07-16 10:04:21
類別範本的“型別參數列”中可以出現非型別引數,例如下面的例子:
template<class T, int size>
class CArray {
    T array[size];
public:
    void Print()
    {
        for (int i = 0; i < size; ++i)
            cout << array[i] << endl;
    }
};
可以用 CArray 模板定義物件,例如:

CArray<int, 40> a;

編譯器自動生成名為 CArray<int, 40> 的類。該類是通過將 CArray 模板中的 T 換成 int、 size 換成 40 後得到的。還可定義以下物件:

CArray <double, 40> a2;
CArray <int, 50> a3;

注意,CArray<double, 40> 和 CArray<int, 50> 完全是兩個類,這兩個類的物件之間不能互相賦值。