作用
template是c++ 泛型编程的实现。对于强类型语言,里面所有的类型都是需要程序员指定或编译器去推断的。但是存在这样一种情况,有些算法或数据结构与数据类型无关,比如链表里面的元素可以是任意一种类型,每次使用都有大量重复的代码,只有数据类型不同,所以 c++泛型解决了这个问题。
原理
当每次使用模板函数或类时,编译器将用具体类型替换占位符,生成具体类或函数,这个过程被称作模板实例化,然后与其他类或函数操作无异。
使用
在要使用的类或定义:template <类型名 占位符[ = 默认类型,类型名 占位符]>
或者这样定义不确定的参数template <类型名 ... 占位符>
。通过这样的声明,就可以使用里面的占位符类型了。
类型模板
template <typename T >
T minimum(const T& lhs, const T& rhs)
{
return lhs < rhs ? lhs : rhs;
}
如上所示,这个例子就使用了T这个占位符,在后面使用的时候通过
int i = minimum<int>(a, b);
这样就动态实现了方法。T就变成了int类型。当然,还可以不加int,因为编译器可以根据a,b值判断出T的类型。
typename 跟 class是等价的。后可以跟类型。比如:
template <