- 類模板(Class Template)
- 函數模板(Function Template)
1.類模板定義:
template<class T1,class T2,....>
class A{
...
//在類的定義中可以使用Ti
};
使用時,應爲所有的Ti提供類型,如:A<int,float> a;
2.函數模板的定義:
template<typename T1,typename T2,...>
return_type func_name(parameters){
...
//在函數體中可以使用數據類型參數
}
使用時,直接 函數名(實參)
編譯器可以根據調用時傳遞的參數來自動推演數據類型,所以要注意類型的一致性,如果同一個T推演出來的類型不一致,則會出現錯誤。
這裏又有兩種情況:
(1)模板類型參數
用class或typename指定模板參數,這裏的模板參數表示類型,如:
template <class U , typename T> calc(const T&,const U&);
(2)非類型模板參數
非類型參數表示一個值而不是一個類型。當一個模板被實例化時,非類型參數被一個用戶提供的或編譯器推斷出的值所替代,這些值必須是常量表達式,從而允許編譯器在編譯時實例化模板。
如:
template<unsigned N,unsigned M>
int func(int (&a)[N],int (&b)[M]){
//...
}
注意: 在模板定義中,模板參數列表(即<>中的列表)不能爲空。