模板

  • 類模板(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]){
            //...
        }

注意: 在模板定義中,模板參數列表(即<>中的列表)不能爲空。

發佈了37 篇原創文章 · 獲贊 7 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章