椋鸟C++笔记#6:模板的基础用法


萌新的学习笔记,写错了恳请斧正。

泛式编程

在C语言笔记#22中,我们提到了泛式编程可以减少对特定数据类型的依赖,并且使用泛型指针void*在C语言中实现了一个“万能”的冒泡排序。而在C++中,泛式编程更加容易,因为C++提供了模版这么一个概念。

函数模板

一个函数模板就代表了一个函数家族,函数模板与类型无关,只在使用时才被参数化,根据参数的类型来产生函数的特定版本。

如果我们想在函数中使用未定的类型,我们只要在函数的声明和定义前各加上一行template语句。

template语句的格式为:

template <typename T1, typename T2, ..., typename Tn>
//下面直接接模版函数的本体即可,本体中就可以利用我们设置的模版类型T1,T2……
//这里typename也可以替换为class,但是这样不符合自然语言逻辑:
template <class T1, class T2, ..., class Tn>

比方说如果我们想写一个任意类型的加法函数,只需要这样:

template <typename T>
T add(T a, T b)
{
   
   
    return a + b;
}

但是这里要求参数a和参数b是同一个类型的变量,如果我们的函数涉及到多个互不关联的未定的类型,就需要在template的形参列表中加上一些东西,比方说写一个比较两个类型变量的内存大小的函数:

template <typename T1, typename T2>
bool TypeSizeBigger(T1 x, T2 y)
{
   
   
    return (sizeof(x) > sizeof(y)) ? true : false;
}
函数模板的实例化

在编译阶段,编译器根据传入模板的实参类型来推演生成对应类型的函数以供调用

比方说对于上面的add函数在程序中实际有三种类型传入进来调用。那么编译器实际上在编译时就根据模板生成了三个仅类型不同的函数,每一个用于处理不同的类型的调用。用不同类型的参数使用函数模板是,也称为函数模板的实例化

实例化分为隐式实例化显示实例化

隐式实例化

隐式实例化就是让编译器根据实参自己推演模板参数的实际类型。

template <typename T>
T Add(const T& a, const T& b)
{
   
   
    return a + b;
}

int main()
{
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

椋鸟Starling

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

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

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

打赏作者

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

抵扣说明:

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

余额充值