一.模板的概念
模板是一种参数化的多态性工具,对于不同数据类型执行相同操作时,模板提供了更贱简化的方式,不必多次重写代码,减少代码复用。采用模板,可以为逻辑功能相同而数据类型不同的程序提供共享的代码
二.模板函数
定义模板函数的方法,可以具有多个参数。(typename也可以写为class,意思相同)
template<typename T>
template<typename T>
void Prin(T a)
{
cout << a << endl;
}
模板函数的使用:如上,给出的参数数据类型为T,在模板函数中,既可以显式的给出数据类型,也可以隐式推导数据类型
显式
Prin<string>("abcd");
隐式推导
Prin("abcd");
注意:模板并不是真正的函数,只有在使用到模板的时候,才会根据数据类型创建一个真正的函数,所以根据模板创建函数实际发生在对模板的调用时,在编译过程中完成对函数的创建。
三.类模板
如函数模板一样,类模板是参数化的类,即用于实现数据类型参数化的类。可以根据给出的数据类型创建实际类。
template<typename T>
class P
{
public:
T a;
};
与模板函数不同的一点是,使用类模板创建实际类 并不会发生隐式推导,必须要求显式地给出参数的数据类型