1,函數模板
函數模板即容許多個函數定義簡化成用統一的函數定義形式來描述。實際上,函數模板表示了一組同名函數,這些同名函數之間,都是重載函數。
函數模板定義的通常形式是:
template <模板參數表>
函數類型標誌符 函數名(形式參數列表)
{
//函數體
}
2,模板函數
函數模板是模板定義,它指明瞭通用的函數參數。函數模板僅能定義一次,它創建了能在不一樣數據類型的基礎上執行相同操做的通用函數。函數模板定義 僅僅是一個形式上的通用函數定義,C++編譯器並不爲函數模板定義產生任何程序代碼。在C++程序中,能夠給函數模板的類屬類型指定具體的數據類型。 C++編譯器經過程序中對函數模板調用時所給定的參數類型器檢驗是否與類屬屬性相匹配,如果,則以該實參類型替換類屬類型,生成一個實在的函數定義,稱爲模板函數。這個過程就是函數模板定義實例化。C++編譯器所編譯的就是這個新創建的模板函數,它是一個重載函數。
實際上,C++編譯器在對重載函數進行處理時,首先試圖去匹配通常的重載函數,若是匹配不上,再試圖去匹配函數模板,若是任然匹配不上,還有可能對通常的重載函數中的參數類型進行必要的、可行的隱式類型轉換後再去匹配。
例子:
#include <iostream>
#include <string.h>
using namespace std;
template <typename T>
T fun(T a, T b)
{
return a+b;
}
int fun(int a,int b)
{
return a-b;
}
int main()
{
int a=20,b=40;
float c=2.4,d=8.9;
int result=fun(a,b);
float R=fun(c,d);
printf("result=%d,R=%f\n",result,R);
return 0;
}
程序結果,result=-20,而不是60。R=11.300000