1.对于给定的函数名,可以有非模版函数,正常模版函数和显示具体化以及它们的重载函数
2.显示具体化的原型和定义应以template<>开头,并通过名称制定类型
3.具体化将覆盖常规模版,而非模版函数覆盖,具体化和常规模版
<PRE class=brush:java;>#include <IOSTREAM>
template <TYPENAME Any>
void Swap(Any& a,Any& b);
struct job
{
char name[40];
double salary;
int floor;
};
template <> void Swap<JOB>(job& job1,job& job2);//显示具体化声明
void Show(job &j);
int main()
{
using namespace std;
cout.precision(2);
cout.setf(ios::fixed,ios::floatfield);
int i= 10, j = 20;
cout《"i,j"《I《","《J《ENDL;
Any <typename template } 0;
return system(?pause );
Show(sidney);
Show(sue);
swapping: 《endl; job cout《?After Swap(sue,sidney);
cout《?Before sidney='{"Sidney",78060.72,9};'
sue='{"Susan",74000.60,7};' , 《j《endl; i,j="《i《" cout《?Now Swap(i,j);
《endl; swapper: int compiler-generated cout《?Using>
void Swap(Any& a,Any& b)
{
Any temp =a;
a = b;
b = temp;
}
template<> void Swap<JOB>(job& job1,job& job2)//显示具体化定义(不需要再声明template <TYPENAME Any>)
{
double t1;
int t2;
t1 = job1.salary;
job1.salary = job2.salary;
job2.salary = t1;
t2 = job1.floor;
job1.floor = job2.floor;
job2.floor = t2;
}
void Show(job &j)
{