12.2 函数模板
代码12.2 中的add函数便是一个函数模板,编译器根据函数模板的定义,检查传入的参数类型,生成相应的函数,并进行调用。函数模板的定义形式如下所示。
template<模板参数表> 返回类型函数名(参数列表) { //函数体 }
关键字template放在模板的定义与声明的最前面,其后是用逗号分隔的模板参数表,用尖括号<>括起来。模板参数表不能为空,模板参数有以下两种类型。
❑class或typename修饰的类型参数,代表一种类型。
❑非类型参数,由已知类型符,代表一个常量表达式。
返回类型和函数的参数列表中可以包含类型参数,在函数中可以使用模板参数表中的常量表达式,如下所示。
template<class Any,class Another,int number> double fun(Any a,int b,Another c) { //函数体,其中number可以作为一个int型常量来使用 }
12.2.1 函数模板的使用
函数模板的使用规则和普通函数是相同的,在使用函数模板之前,必须对函数模板进行声明,此说明必须在外部进行,也就是说不能在任何一个函数(包括main函数)中声明,声明的格式如下所示。
template<class T1[,class T2,……]>//或template<class T1[,class T2,……]> 函数原型;
注意
同普通函数一样,如果在使用函数模板前对函数模板进行了定义,函数模板的声明可以省略,如代码12.2所示。