模板声明 template<typename/class T>, typename比class最近后添加到C++标准。
常规模板,具体化模板,非模板函数的优先调用顺序。
非模板函数(普通函数)> 具体化模板函数 > 常规模板
VS2013支持性不好
显示具体化:
具体化表示为某一特定的类型重写函数模板,声明的含义是使用独立的,专门的函数定义显示地为 特定类型生成函数定义。
显示具体化声明在关键字template后包含<>.
如:
template<> void swap<job>(job &j1, job &j2);
vs2013不支持:
void swap(Any &a, Any &b);
struct job
{
char name[40];
double salary;
int floor;
};
template<> void swap<job>(job &j1, job &j2);
void Show(job &j);
int main(){
using namespace std;
template void swap<job>(job &, job &);
int i = 10, j = 20;
swap(i, j);
return 0;
}
template<typename Any>
void swap(Any &a, Any &b){
Any temp;
temp = a;
a = b;
b = temp;
}
template<> void swap<job>(job &j1, job &j2){
double temp_sal;
temp_sal = j1.salary;
j1.salary = j2.salary;
j2.salary = temp_sal;
}
显示实例化:
实例:如函数调用swap(i,j)会导致编译器生成swap()的一个实例,该实例使用 int 类型。
句法:声明所需的种类用<>符号指示类型,并在声明前加上关键字template:
实例化示例:
template void swap<int>(int, int);