1. 泛型概念:将数据类型作为一个参数,传入到函数、类或接口中,即同一种数据操作,可面向不同的数据类型,因此我们不需要为不同的数据类型写相同的数据操作代码;
2. 泛型编程的优点:
(1)代码复用
(2)避免使用函数重载(相似的操作):函数重载做的是相似的操作,模板是用来做相同的操作;
(3)一次写好,多次使用
3. 函数泛型
1 template<typename T> 2 T myMax(T x, T y) 3 { 4 return (x>y)?x:y; 5 } 6 7 8 myMax<int>(2,3);
4. 类泛型
1 template <typename T> 2 3 class Array 4 { 5 T* ptr; 6 int size; 7 8 public: 9 Array(T arr[],int s); 10 void print(); 11 } 12 13 template <typename T> 14 Array<T>::Array(T arr[],int s) 15 { 16 //pass 17 } 18 19 20 template <typename T> 21 void Array<T>::print() 22 { 23 for(int i=0;i<size;i++) 24 { 25 cout<<(*ptr+i)<<endl; 26 } 27 28 29 int arr[]={1,2,3}; 30 Array<int> a(arr,5); 31 a.print()
5. 多类型泛型:即可以传入多个数据类型到模板参数中,模板参数也可以有默认类型;
1 template<typename T, typename U> 2 class A 3 { 4 T x; 5 U y; 6 } 7 8 9 A<int, double> a;
6. 可以在template中传入非类型参数,但必须是常量(编译时必须知道值);
1 template <typename T, int max> 2 int arrMin(T arr[], int n) 3 { 4 //pass 5 } 6 7 8 9 int arr1[]={1,2,3}; 10 arrMin<int, 100>(arr1,10);
7. 可以指定某个数据类型做其他操作:即template specialization;