模板就是建立通用的模具,大大提高復用性。
c++的另一種編程思想是泛型編程,主要利用的就是模板。
c++提供兩種模板機制:函數模板和類模板。
聲明:template<class T>//typename可以替換成class
函數模板
函數模板的作用:建立一個通用函數,其函數返回值類型和形參類型可以不具體制定,用一個虛擬的類型來代表。
#include<iostream> #include<fstream> #include<string> using namespace std; void swapInt(int& a,int& b) { int tmp = a; a = b; b = tmp; } void swapFloat(float& a, float& b) { float tmp = a; a = b; b = tmp; } int main() { int a = 1; int b = 2; swapInt(a, b); cout << "a=" << a << "\t" << "b=" << b << endl; float c = 1.1f; float d = 2.2f; swapFloat(c, d); cout << "c=" << c << "\t" << "d=" << d << endl; system("pause"); return 0; }
假設我們要設置所有數據類型的交換函數,那么如果按照普通的方式來寫,就要寫很多的函數,利用泛型就可以進行簡化。
#include<iostream> #include<fstream> #include<string> using namespace std; //模板函數 //聲明一個模板,表明T是一個通用數據類型 template<typename T> void mySwap(T& a,T& b) { T tmp = a; a = b; b = tmp; } int main() { int a = 1; int b = 2; //使用模板函數有兩種方式 //1.自動類型推導 mySwap(a, b); cout << "a=" << a << "\t" << "b=" << b << endl; //2.顯示指定類型 mySwap<int>(a, b); cout << "a=" << a << "\t" << "b=" << b << endl; float c = 1.1f; float d = 2.2f; mySwap(c, d); cout << "c=" << c << "\t" << "d=" << d << endl; system("pause"); return 0; }
輸出:
模板注意事項:
- 自動類型推導必須推導出一致的數據類型T才可以使用;
- 模板必須要確定出T的數據類型;