C++中的函数模板

一、函数模板的基础用法

函数模板允许以任意类型的方式来定义函数,模板使用如下:

template<typename/class T>         //使用typename或class均可

返回值类型 函数名(T a,T b...){ 函数体 }

函数模板在声明和定义时均需要写template<typename/class T> 。函数模板一般放在头文件当中,并在需要使用模板的文件中包含头文件。

函数模板同样可以重载,即函数的特征标(形参的类型或个数)不同。

二、函数模板的显式具体化

函数模板显式具体化即在已定义常规模板的前提下,针对特定参数类型(如类、结构体)单独编写函数;当调用函数参数列表匹配该特定参数类型时,将调用显式具体化的函数模板,而非常规模板。

在显式具体化函数上,C++采用以下规则:

1.对于给定的函数名,可以有非模板函数、模板函数、显式具体化模板函数及它们的重载版本。

2.显示具体化以template<>打头,并在参数列表中指出类型。

3.在调用上,显式具体化优先于常规模板,非模板函数优先于显式具体化和模板函数。

三、实例化和具体化

隐式实例化:函数模板本身不会生成函数定义。编译器在使用模板为特定类型生成函数定义时,才得到模板实例,这种方式称为隐式实例化。

显式实例化:直接命令编译器生成特定的实例,其语法是,在创建模板的前提下,在声明时用<>在函数名后指定特定的类型,并在最前面加上template。

template 返回值类型 函数名<特定类型>(形参);

显式具体化:显式实例化是提前生成实例,显式具体化是针对特定类型使用不同的规则。在语法上,区别在于<>的位置不同,显式实例化的<>位于函数名之后,显式具体化的<>位于template之后,函数名之前。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值