c++模板
程序设计中经常会用到一些程序实体:它们的实现和所完成的功能基本相同,不同的仅 仅是所涉及的数据类型不同。而模板正是一种专门处理不同数据类型的机制
值和类型是数据的两个主要特征,它们在C++中都可以被参数化。
数据的值可以通过函数参数传递,在函数定义时数据的值是未知的,只有等到函数调用 时接收了实参才能确定其值。——这就是值的参数化。
数据的类型也可以通过参数来传递,在函数定义时可以不指明具体的数据类型,当函数调用时,编译器根据传入的实参自动推断数据类型。——这就是类型的参数化
函数模板
函数模板— 定义通用函数,不指明其数据类型,用虚拟类型替代。
定义格式:
template <typename 形参名, typename 形参名...> //模板头(模板说明)
返回值类型 函数名(参数列表) //函数定义
{
函数体;
}
template <typename T1, typename T2>
T1 add(T1 t1, T2 t2)
{
return t1 + t2;
}
template是声明模板的关键字,告诉编译器开始泛型编程
尖括号<>中的typename是定义形参的关键字,用来说明其后的形参名为类型 参数,(模板形参)。Typename(建议用)可以用class关键字代替,两者没有区别
函数模板的实例化
函数模板实例化的方法有两种:
隐式实例化:根据具体的函数调用形式,推演出模板参数类型。
显式实例化:通过显式声明形式指定模板参数类型