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所示。