C++中的函数模板

文章介绍了C++中的函数模板基础,包括如何定义和使用。函数模板允许定义通用的函数,可以进行重载。接着讨论了显式具体化,即为特定类型编写专门的函数模板实现。显式实例化和隐式实例化是两种不同的生成模板实例的方式,前者是程序员明确指定类型,后者由编译器自动完成。

一、函数模板的基础用法

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

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

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

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

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

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

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

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

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

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

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

三、实例化和具体化

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

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

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值