C++中函數模板的理解

一.函數模板(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 }          

 

模板函數適合函數結構一樣或者類似,都可以兼容的,我們只需要給他傳遞不同的數據類型。

還有就是函數模板和函數重載並不是替換的關係,

函數模板適合用於函數名和函數結構一樣,且都可以兼容的。

重載函數也是相同的函數名,但是他可以實現不同的業務需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章