模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
1、模板函数
1 #include <iostream> 2 using namespce std; 3 4 //声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小 5 //class也可以被typename代替,T可以被任何字母或者数字代替。 6 template <class T> 7 T min(T x,T y) 8 { 9 return(x<y)?x:y; 10 } 11 12 void main() 13 { 14 int n1=2,n2=10; 15 double d1=1.5,d2=5.6; 16 cout<< "较小整数:"<<min(n1,n2)<<endl; 17 cout<< "较小实数:"<<min(d1,d2)<<endl; 18 system("PAUSE"); 19 }
2、模板类
1 // ClassTemplate.h 2 #ifndef ClassTemplate_HH 3 #define ClassTemplate_HH 4 5 template <typename T1,typename T2> 6 class myClass 7 { 8 private: 9 T1 I; 10 T2 J; 11 public: 12 myClass(T1 a, T2 b);//Constructor 13 void show(); 14 }; 15 16 //注意,函数定义也是在.h文件中。 17 template <typename T1,typename T2> 18 myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b) 19 { 20 } 21 22 template <typename T1,typename T2> 23 void myClass<T1,T2>::show() 24 { 25 cout<<"I="<<I<<", J="<<J<<endl; 26 } 27 28 #endif 29 30 // main.cpp 31 #include <iostream> 32 #include "ClassTemplate.h" 33 using namespace std; 34 void main() 35 { 36 myClass<int,int> class1(3,5); 37 class1.show(); 38 myClass<int,char> class2(3,'a'); 39 class2.show(); 40 system("PAUSE"); 41 }
3、模板类型的参数
1)一般来说,非类型模板参数可以是常整数(包括枚举)或者指向外部链接对象的指针。
那么就是说,浮点数是不行的,指向内部链接对象的指针是不行的。
2)模板类型是一个容器或类
1 template <typename T> 2 void print(T v) 3 { 4 T::iterator itor; 5 for (itor = v.begin(); itor != v.end(); ++itor) 6 { 7 cout << *itor << " "; 8 } 9 cout << endl; 10 } 11 12 void main(int argc, char **argv) 13 { 14 list<int> l; 15 l.push_back(1); 16 l.push_front(2); 17 if(!l.empty()) 18 print(l); 19 vector<int> vec; 20 vec.push_back(1); 21 vec.push_back(6); 22 if(!vec.empty()) 23 print(vec); 24 }
附:参考http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html