《Beginning C++20 From Novice to Professional》第十章 Function Templates

C++ Template 基础篇(一):函数模板_函数模板的定义及使用-优快云博客

这篇博客提到模板是泛型编程的基础,把类型也当做参数,这样使得静态类型语言对类型的处理更强大,提高了代码的可重用性,目标和软件工程一致,提供可复用的代码

本章可以学到下面内容:

Function Templates

函数模板本身不是函数,它是一种“食谱”或者“图纸”,表示一系列的函数声明;模板是参数化的函数定义,函数的实例需要有参数才可以创建,也就是说非必要时不会生成函数定义

由函数模板生成函数的过程叫作实例化instantiation,模板的参数通常是类型,但也有可能是其他一些值,比如维度等

我们来看一个之前提到过的例子,函数模板语法大致如上,尖括号里是模板参数,然后把这里声明的参数当做正常类型使用即可

这里的T叫做模板类型参数,我们可以用typename关键字,也可以用class关键字,但是更推荐前者

Creating Instances of a Function Template

举个使用的例子↑

可以看到我们就像使用普通函数一样使用函数模板,T一般是不需要我们指定的,编译器会去进行推导,这种机制叫模板实参推导;编译器首先查找有没有double参数的larger版本函数,如果没有就会通过模板实例化生成一个double larger()

直到这里,实例化的过程就完成了;每个版本的函数只会生成一次,即使不同文件都包含类似的模板;再举一个例子:

Template Type Parameters

一般提到parameter,指的都是形参,是函数定义时的理想参数,而不是调用函数时传入的那个值

形参T可以实例化为很多类型,前面说过string不适合复制,所以我们可以使用const引用来写这个比较大小的函数:

事实上标准库里有一对max、min函数的实现逻辑就和这个例子类似:

Explicit Template Arguments

这里强调的是当调用实例的时候实参类型和模板矛盾的情况,举个例子:

这个larger我们用一个int和一个double传入函数再看,发现编译不通过,提示对于类型T有两个矛盾的推导类型,这说明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

+xiaowenhao+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值