模版算是C++的獨有特性吧,也算是C++中比較難的地方,我平時開發的時候用的非常少,或者幾乎沒有用到,需要模版的地方是能看懂框架中相關的代碼;
模版函數相對還是很簡單的,引入模版的目的在於代碼的重用;比如算法相似,但是由於數據類型不同,我們不得不把同樣的一份代碼拷貝兩次,而僅僅是為了修改數據類型,那么在引入了函數模版之后,我們可以僅僅用一份代碼而表示不同重載函數。
下面介紹一下最簡單的函數模版的應用:
template <typename T> //定義一個抽象的數據類型T
T myMax(T a, T b) { //聲明函數模板
return a > b ? a : b;
}
int main () {
int a = 2;
int b = 3;
std::cout<<myMax(a, b)<<std::endl; //動態生成函數 int myMax(int , int)
float c = 2.0f;
float d = 3.0f;
std::cout<<myMax(c, d)<<std::endl; //動態生成函數 flota myMax(float, float)
}
代碼在第一次調用myMax()函數時,其參數都是int型,則編譯器推導模板參數T為int,編譯器會以函數模板為樣板,以實際類型int代替函數模板中的抽象類型T,自動為這個函數調用生成一個int類型的版本。