模板函数是通用的函数描述,其形式如下:
teplate<tyname(class) anytype> //这样就指出了要建立一个模板并将类型命名为anytype。template是关键字,typename是必须的,可以使用关键字class代替typename
并非所有的模板参数都必须是模板参数类型,也可以是内置类型。
如:template<class T>
void fun(T*a,int b); //这样也是允许的
但是模板具有很大的局限性,它无法处理某些类型
如:void fun(T a,T b) {a=b}
如果T为数组类型就无法处理,所以C++提供的解决方案是为特定类型提供具体化的模板定义-----称为显示具体化
例如为一个名为A的类提供具体化模板类型定义如下:
template<>void fun(A a,A b);//这样便可以解决局限性问题
注意对于给定的函数名,可以有非模板函数,模板函数和显示具体化模板函数,它们间的优先级为非模板>显示具体化模板>模板函数。
在说模板的实例化,最初编译器只能通过隐式实例化来使用模板生成函数,但现在C++还允许显示实例化,显示实例化如下:
template void fun<int>(int,int);//注意与显示具体化的区别!
最后我们应该知道在代码中包含函数模板本身并不会生成函数定义,它只是一个用于生成函数定义的方案,只有使用模板实例的才是函数定义!