1. 函数模板
函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型版本。
例如,一个比较两个值并返回比较结果的函数的模板版本为:
template <typename T>
int compare(const T &v1,const T &v2)
{
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}
模板定义以关键字template开始,后接模板形参表,它是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。
在函数模板形参表中,关键字typename和class具有相同含义,可以互换使用。
使用函数模板时,编译器自动实例化不同的版本:
compare(1,2);
compare("hi","world");
从函数实参确定模板实参的类型和值的过程叫做模板实参推断。
2. 类模板
自定义Queue类,Queue类的接口为:
template <class Type> class Queue{
public:
Queue ();
Type &front ();
const Type &front () const;
void push (const Type &);
void pop();
bool empty() const;
private:
//...
};
在使用类模板时,与调用函数模板不同,必须为模板形参显式指定实参:
Queue<int> qi;
Queue< vector<double> > qc;
Queue<string> qs;