template <型別參數列>
class 類別範本名{
成員函數和成員變數
};
class類塑引數1, class型別引數2, ...
類別範本中的成員函數放到類別範本定義外面寫時的語法如下:
template <型別參數列>
返回值型別 類別範本名<型別引數名列表>::成員函數名(參數列)
{
...
}
類別範本名<真實型別參數列> 物件名(建構函式實際參數列);
如果類別範本有無參建構函式,那麼也可以使用如下寫法:類別範本名 <真實型別參數列> 物件名;
類別範本看上去很像一個類。下面以 Pair 類別範本為例來說明類別範本的寫法和用法。#include <iostream> #include <string> using namespace std; template <class T1,class T2> class Pair { public: T1 key; //關鍵字 T2 value; //值 Pair(T1 k,T2 v):key(k),value(v) { }; bool operator < (const Pair<T1,T2> & p) const; }; template<class T1,class T2> bool Pair<T1,T2>::operator < (const Pair<T1,T2> & p) const //Pair的成員函數 operator < { //"小"的意思就是關鍵字小 return key < p.key; } int main() { Pair<string,int> student("Tom",19); //範例化出一個類 Pair<string,int> cout << student.key << " " << student.value; return 0; }程式的輸出結果是:
類別範本名 <真實型別參數列>
就成為一個具體的類的名字。#include <iostream> using namespace std; template <class T> class A { public: template <class T2> void Func(T2 t) { cout << t; } //成員函數模板 }; int main() { A<int> a; a.Func('K'); //成員函數模板Func被範例化 a.Func("hello"); return 0; }程式的輸出結果是: