实例化和具体化详解
primer Plus在解释具体化和实例化看的有点乱,分解出来备忘 在代码中包含函数模板本身并不会生成函数定义,它只是用于生成函数定义的方案 编译器使用模板为我写类型生成函数定义时,得到的是模板实例 如这个模板 template<typename T> void Swap(T &t1,T &t2) { T _t; _t=t1; t1=t2; t2=_t; } 调用 int i = 10,j=20; ::cout<<"i, j ="<<i<<" , "<<j<<endl; cout<<" Using compiler -generated int swapper:\n"; Swap(i,j); ::cout<<"Now i, j ="<<i<<" , "<<j<<endl; 调用 Swap(i,j)导致编译器生成Swap()的一个实例,该实例使用int类型。模板并非函数定义,但使用int的模板实例是函数定义。 这种实例化方式被称为隐式实例化,编译器之所以知道需要进行定义,是由于程序调用Swap()函数时提供了int 参数。 c++还允许 显示实例化 其语法是,声明所需的种类用<>指示类型并在声明前加上template: template void Swap<int>(int &t1,int &t2); 例子 #include<iostream> using namespace std