C++模板template

模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。

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

猜你喜欢

转载自www.cnblogs.com/wangbin-heng/p/9545333.html