函数模板,将同一种函数算法应用于各种数据类型。
声明:
template <typename T>
void swap(T & a,T & b);
定义:
template <typename T>
void swap(T & a,T & b)
{
T temp;
temp = a;
a = b;
b = temp;
}
注意函数模板不能缩短可执行程序,最终的代码不包含任何模板,只包含了为程序生成的实际函数。函数模板的好处在于,使得生成多个函数定义更简单、更可靠。
重载和函数模板结合时,并不要求模板参数都必须是模板参数类型。
为特定类型提供具体化模板定义,称为显式具体化。当编译器找到与函数调用匹配的具体化定义时,将使用该定义而不再寻找其模板。具体化优先于常规模板,而非模板函数优先于具体化和常规模板。
用显式具体化,要求原型和定义用template <>打头。
template <typename T>
void swap(T &,T &);
template <> void swap(job &,job &);
或者:
template <> void swap<job>(job &,job &);
以上均为隐式实例化,由编译器根据参数类型推断。而显式实例化直接指定生成哪一种类型示例,由template打头:
template void swap<int>(int &,int &);
显式实例化作用为减少推断隐式实例化的必要,提高编译效率。
新闻热点
疑难解答