模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
1. 模板是一种对类型进行参数化的工具;模板就是针对类型而言的。
2. 通常有两种形式:函数模板和类模板;
函数模板针对仅参数类型不同的函数;
类模板针对仅数据成员和成员函数类型不同的类。
注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。
函数模板:
template <class T>
T max_T(T x1,T x2)
{
if(x1<x2)
return x2;
else
return x1;
}
void main()
{
printf("%d",max_T<double>(2,3)); // 或者,int a=2,b=3; max_T(a,b);
system("pause");
}
类模板:
template <class T1,class T2>
class MyClass
{
public :
MyClass(T1 a, T2 b); // 这里只是进行了声明,将实现部分移动到了类外,也可以在此处实现函数。
void show();
private:
T1 m;
T2 n;
};
template<class T1,class T2>
MyClass<T1,T2>::MyClass(T1 a, T2 b):m(a),n(b)
{
}
template<class T1, class T2>
void MyClass<T1,T2>::show()
{
cout<<"m:"<<m<<" n:"<<n<<endl;
}
void main()
{
MyClass<int,int> class1(2,3);
class1.show();
MyClass<int ,char> class2(4,'a');
class2.show();
system("pause");
}
另外,再举一个例子,是对容器模板类
template<class T>
void print(T v)
{
T::iterator it;
for(it = v.begin(); it!=v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void main()
{
list<int> l;
l.push_back(5);
l.push_back(10);
if(!l.empty())
print(l);
system("pause");
}