1·函数模版是指将几个功能类似的函数用一个通用的函数代替,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。
比如求两个数较大数的函数,有int,float,double不同的类型要考虑,这时候就可以使用函数模版,举例如下:
template <typename T>
T max(T a,T b)
{return a>b?a:b;}
调用时可以根据情况直接使用:
int a1=1,a2=2;a3;
double b1=1.1,b2=2.2;b3;
a3=max(a1,a2);
b3=max(b1,b2);
template的意思是“模版”,尖括号中先写typename,后面跟一个类型参数,这个参数名字可以随便起。
函数模版只适用于函数的参数相同而类型不同,且函数体相同的情况。如果函数的参数个数不同,则不能使用函数模版。
2,类模版
类似于函数模版,比如两个类,一个可以实现求两个int类型数的较大值,另一个可以求double型的较大值,则可以直接使用类模版。
template <class muntype> //声明一个模版,虚拟类型名为numtype
class Compare
{public:
Compare(numtype a,numtype b)
{x=a,y=b;}
numtype max()
{return (x>y) ? x:y}
private :
numtype x,y;
}
声明类模版时要在增加一行:
template <class 类型参数名>
用类模版定义对象是要指明对象类型:
Compare<int> cmp(4,7)
如果是在类模版外定义成员函数,应当写成类模版形式:
template <class numtype>
numttype Compare<numtype>::max()
{return (x>y)? x:y}