一、模板的定義
template<typename T>
以關鍵字template開頭,后面跟一個模板參數列表,列表里面用逗號將多個模板參數隔開定義的注意事項
模板的編譯
當編譯器遇到一個模板定義時,并不生成代碼。只有當實例化處模板的一個特定版本時,編譯器才會生成代碼
重點:通常,當我們調用一個函數/定義實例化一個類時,編譯器只需掌握函數的聲明/類的聲明即可,因此可以把函數/類的聲明放置在頭文件,而把函數/類的定義放置在源文件中。但是模板則不同:為了實例化模板函數,編譯器必須掌握函數模板/類模板成員函數的聲明和定義,因此只能將模板函數/類的聲明和定義都放置在頭一個頭文件/源文件中(重點)
二、函數模板與模板函數
函數模板:一個模板(是模板)
模板函數:調用函數模板時生成的函數(是函數),也稱為函數模板的實例化
一個模板參數列表只和一個函數模板相對應。因此每定義一個函數模板就需要重新定義一個模板參數列表
//定義模板以及一個函數模板
template <typename T>int compare(const T &v1, const T &v2);int main(){compare(1, 2); //模板函數,也稱為模板的實例化comp