本篇文章部分参考自互联网有关模板的解释,再经过自己实践及理解而写作出来。感谢互联网资料的帮助。
 
模板定义:
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模板可以分为两类,一个是函数模板,另外一个是类模板。
 
模板实现的写作方法: 
1.函数模板的写法
函数模板的一般形式如下:
Template <class 或者也可以用typename  T>
返回类型 函数名(形参表)
{//
函数定义体 }
说明: template 是一个声明模板的关键字,表示声明一个模板关键字class 不能省略,如果类型形参多于一个 ,每个形参前都要加class < 类型 形参表> 可以包含基本数据类型可以包含类类型.
注意:每个模板函数前面都要加上“Template <class 或者也可以用typename  T> ”这一行。
//在template语句与函数模板语句之间不允许有别的语句;
请看以下程序:
//mian.cpp
#include  <iostream>
// 声明一个函数模版, 用来比较输入的两个相同数据类型的参数的大小,class 也可以被typename 代替,
//T 可以被任何字母或者数字代替。
template  <class  T>
T max(T &x,T &y)//主要必须是参数引用,不能是 T min(T x,T y)
  if (a>b)
 {
  return a;
 }
 return b;
}
void  main( )
{
 int i1 = 3,i2=5;
 char c1='a',c2='b';
 double d1=0.35,d2 = 0.2;
 
 cout<<"for int最大的为:"<<max(i1,i2)<<endl;
 cout<<"for char最大的为:"<<max(c1,c2)<<endl;
 cout<<"for double最大的为:"<<max(d1,d2)<<endl;
}
 
2.  类模板的写法
定义一个类模板:
Template < class 或者也可以用typename  T >
class 类名{

};
说明:其中,template 是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。个前面要有class或typename,用逗号隔开
注意:每个模板类数前面都要加上“Template <class 或者也可以用typename  T> 这一行。
例如:定义一个类模板:
// template.h
#paragm once
 
template <typename  T1,typename  T2>
class  myClass{
private :
      T1 I;
      T2 J;
public :
      myClass(T1 a, T2 b);//若成员函数中使用了模板,则此函数需要在类体外定义!!!
      void  show();
};
 
//构造函数
template  <typename  T1,typename  T2>
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}
 
void show();
template  <typename  T1,typename  T2>
void  myClass<T1,T2>::show()
{
      cout<<"I=" <<I<<", J=" <<J<<endl;
}
 
注意:每个模板类的成员函数前都必须加上模板声明template  <typename  T1,typename  T2> ,然后接下来命名类似于普通类,但必须加上类参数myClass<T1,T2>
 
// run.cpp
#include  "template.h"
#include  <iostream>
using namespace std; 
void  main()
{
//什么一个类的对象类似于普通类对象声明,但必须实例化类模板参数,如:myClass<int ,int > ,其余的调用函数方法跟普通类一样
 
 myClass<int,int>class1(1,2);
 class1.show();
 
 myClass<char,char>class2('a','b');
 class2.show();
}
 
3.非类型模版参数
一般来说,非类型模板参数可以是常整数(包括枚举)或者指向外部链接对象的指针。
那么就是说,浮点数是不行的,指向内部链接对象的指针是不行的。

template <typename  T, int  MAXSIZE>
class  Stack{
Private:
        T elems[MAXSIZE];
};
Int main()
{
        Stack<int , 20> int20Stack;
        Stack<int , 40> int40Stack;
};
 
注意:最主要是注意格式,特别是类模板 定义的格式 和 实例化类模板的格式 ,函数模板定义时参数用引用& !