首页 > 学院 > 开发设计 > 正文

函数模板

2019-11-14 10:07:49
字体:
来源:转载
供稿:网友

函数模板,将同一种函数算法应用于各种数据类型。

声明:

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 &);

显式实例化作用为减少推断隐式实例化的必要,提高编译效率。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表