3.5.1 模板语法
模板函数的模型和实现从一个模板参数表开始。其语法包括关键字template,后面紧跟用角扩号括起来的形式类型的非空表在这个参数表中,每种类型前面都有关键字typename , 不同的类型之间用逗号隔开。
//一个模板类型的参数表
template
//多个模板类型的参数表
template
尽管不是必须的,但C++程序员通常使用T表示模板参数中的类型。当程序使用模板函数时,编译器会把T与实际的C++类型联系起来,如整形或字符型,或者程序员自定义的类型,然后,用指定的C++类型替换T 。
除了初始模板参数表之外,模板函数的声明和实现遵循函数编码的标准规则。程序员可以为函数中的函数参数、返回类型和局部对象的声明使用模板类型。同时,两个重要的限制:1.函数参数表中至少一个参数为模板类型T 。 2.函数体中的C++语句可以使用类型T对象,但只能使用对应于类型T的实际类型有效的操作。例如,某个程序可能不能对矩形使用包含 <运算符的模板函数,因为矩形没有定义这个操作。>
template
returntype funcname(T arg,…)
{
//C++语句可以使用类型T,但仅用于对T有效的操作
}
3.5.2 运行时模板扩展
当编译器发现某个语句调用模板函数时,就确定调用参数的类型,并用指定的类型生成函数代码的实例。
当编译器调用模板函数时,必须能够明确地判断类型T , 如果编译器判断T为两个或多个可能的类型,则输出错误信息。