template <class T>
这是模板头,不管是函数模板还是类模板,函数模板头是必须的,T是一个替代符,用来表示一个类型,可以是标准的内置类型,也可以是自定义类型。
具体选用什么样的类型实在编译阶段确定的,不会影响运行时的效率。
函数模板
比较两个数的大小的函数模板
T max(const T & input1, const T & input2)
{
return ((input1 > input2) ? input1 : input2);
}
类模板
简单的容器类模板
template <class T>
class CVector
{
...
public :
int push_back(const T & element);
int pop_back(const T & element);
...
};
CVector <TypeName> TypeList;
TypeList.push_back(element);
TypeList.pop_back(element);
注意:
类模板在使用时需要特例化,告诉编译器使用什么样的类型实现;
函数模板也需要特例化,但是这个特例化是隐士的。