函数模板
隐示实例化
直接调用已经定义过的模板函数,即可让编译器将该函数实例化
template <class T> void func(T &t);
int a = 10;
func (a);
显式实例化
通过一次声明模板的类型,使得函数被实例化。
template <class T> void func(T &t);
template void func<int>(int &t);
类模板
隐式实例化
不需要明白告诉编译器,直接调用类,便可以使得类被编译器实例化
template <class T, int n>
class A{……}
A<string, int> temp;
显式实例化
通过一次声明某种类型模板的声明类,使得该类被实例化。
template <class T, int n>
class A{……}
template class A<int>;
显式具体化
用于代码中创建类,为兼容不同模板类型导致的某些成员函数实现方式异同的问题
template <class T, int n> class A{……}
template <> class A(const char *, int){……}
部分具体化
基于显示具体化,如果模板中多个未确定参数类型,可以指定其中某些参数类型为已知
template <class T, class n> class A{……};
template <class n> class A(const char *, n){……}