1.在编写C++程序时,很多情况下会同时使用函数模板和函数模板的显示具体化:
void Swap(T &a, T &b)
{
T temp;
temp = a;
a = b;
b = temp;
}
template <> void Swap<job>(job &j1, job &j2)
{
double t1;
int t2;
t1 = j1.salary;
j1.salary = j2.salary;
j2.salary = t1;
t2 = j1.floor;
j1.floor = j2.floor;
j2.floor = t2;
}
在用到上述函数模板和具体化时,需要在main()函数前进行函数原型的声明,然而如果先声明具体化,再声明函数模板:
template<> void Swap<job>(job &j1, job &j2);
template <typename T>
void Swap(T &a, T &b);
程序编译将出现如下错误:
所以:需要先声明函数模板,再声明函数模板的显示具体化;而函数模板和具体化的定义顺序则是无关紧要的。
2.仅仅声明函数模板的具体化,而不声明函数模板:
//template <typename T>
//void Swap(T &a, T &b);
template<> void Swap<job>(job &j1, job &j2);
程序同样会出现编译错误;
3.在先声明函数模板后,函数模板的显示具体化和显示实例化的顺序是无关紧要的。
template <typename T>
void Swap(T &a, T &b);
template<> void Swap<job>(job &j1, job &j2);
template void Swap<int>(int &a, int &b);