//函數模板定義--數據類型做參數 #include<iostream> using namespace std; /* 函數模板聲明 1.函數模板定義由模板說明和函數定義組成,並且一個模板說明對應一個函數定義 2.模板說明的類屬參數必須在函數定義中至少出現一次 3.函數參數表中可以使用類屬類型參數,也可以使用一般類型參數 */ /* template關鍵字告訴c++編譯器現在要進行泛型編程 typename或者class告訴c++編譯器T是一個數據類型,不要進行語法檢查 typename和class完全可以互相替換 */ template<typename T>//也可以寫成template<class T> void myswap(T &a, T &b){ T c = a; a = b; b = c; }; //void Print(T &a,T &b){ // cout << "a=" << a << "\nb=" << b << endl; //} //報錯:一個模板說明只能對應一個函數定義,想再定義一個函數,必須再寫一個模板聲明 template<class T> void Print(T &a, T &b){ cout << "a=" << a << "\nb=" << b << endl; } //多參數的函數模板 template<typename T1,typename T2> //這種定義當調用函數時就會報錯 MySort(a); //模板說明的類屬參數必須在函數定義中至少出現一次 void MySort(T1 a){ cout << "aaa" << endl; } template<typename T> void Getnum(T a,int b){ cout << "a=" << a << ";\nb="<<b << endl; } void main(){ int a=1; int b = 2; //泛型編程函數的使用方法1---自動類型推導 myswap(a, b); Print(a, b); //泛型編程函數的使用方法2---顯式具體類型調用 myswap<int>(a, b); Print(a, b); //MySort(a); 報錯 : error C2783: “void MySort(T1)”: 未能為“T2”推導 模板 參數 cout << "----------------" << endl; Getnum(a, 4); system("pause"); }