一.函數模板(function Template)
所謂函數模板,實際上就是建立一個通用函數。
*函數定義時不指定具體的數據類型(使用虛擬類型代替),被調用時才知道數據的類型。
*函數被調用時編譯器根據實參反推數據類型-類型的參數化。
形式如下
//模板頭與函數聲明/定義永遠是不可分割的整體 template <typename 類型參數1 , 類型參數2 ,...> typename也可改爲class,早期的C++是用class 返回值類型 函數名(形參列表){ //在函數體中可以使用類型參數 }
下面看一個小例子,用一個模板函數去實現不同類型的數據交換。
13 #include<iostream> 14 15 using namespace std; 16 //書寫函數模板 17 template <typename T> void Swap(T& , T&); 18 19 int main(int argc , char **argv) 20 { 21 int a =3 , b = 5; 22 double c = 2.4 , d = 4.8; 23 cout << "交換前:"; 24 cout << a << '\t' << b << endl; 25 Swap(a , b); 26 cout << "排序後:"; 27 cout << a << '\t' << b << endl; 28 cout << "排序前:"; 29 cout << c << '\t' << d <<endl; 30 Swap(c , d); 31 cout << "排序後:"; 32 cout << c << '\t' << d <<endl; 33 34 return 0; 35 36 } 37 38 template <typename T> 39 void Swap(T &a , T &b) 40 { 41 T temp = a; 42 a = b; 43 b = temp; 44 }
模板函數適合函數結構一樣或者類似,都可以兼容的,我們只需要給他傳遞不同的數據類型。
還有就是函數模板和函數重載並不是替換的關係,
函數模板適合用於函數名和函數結構一樣,且都可以兼容的。
重載函數也是相同的函數名,但是他可以實現不同的業務需求。