c++模板进阶速成

本篇文章给大家从是什么,怎么用的角度继续深入学习c++模板

目录

非类型模板参数

模板特化

概念

函数模板的特化

类模板的特化

全特化

半特化(偏特化)

分离编译(了解即可)

模板的优缺点

优点

缺点


非类型模板参数

首先介绍一下模板参数的种类:类类型形参、非类型形参

类类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称

非类型形参: 用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用

举个例子:

namespace bite {

// 定义一个模板类型的静态数组

template<class T, size_t  N = 10>//这个N就是非类型模板参数

class array

{

public:

T& operator[ ](size_t index)

{

return _array[index];

}

const T& operator[ ](size_t index)const

{

return _array[index];

}

size_t size()const

{

return _size;

}

bool empty()const

{

return 0 == _size;

}

private:

T _array[N];

size_t _size;

};

}

总结:非类型形参是用一个常量作为一个模板的参数

模板特化

概念

通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些 错误的结果,需要特殊处理

简单来说就是将模板特殊化

函数模板的特化

那么我们来看个例子

从上图可以得知,函数less<Date*>是函数less的特化

那么我们来总结一下这个函数模板的特化格式

函数类型 函数名<(目标的类型)>()

{

代码语句;

}

类模板的特化

全特化

全特化概念:将模板参数列表中所有的参数都确定化

那么从上图中我们可以看到类模板特化中class Date类的参数类型确定了(也就是int 和char),这个就是全特化

半特化(偏特化)

偏特化就是在全特化的基础上,部分参数的类型是确定的,例子见下图

分离编译(了解即可)

概念:一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。

模板的优缺点

优点

1. 模板复用了代码,节省资源,更快的迭代开发

2. 增强了代码的灵活性

缺点

1. 模板会导致代码膨胀问题,也会导致编译时间变长

2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误

那么本篇文章的内容到这里就结束了,那么这篇文章的结束只能代表c++的初阶结束,c++速成系列依旧会持续更新,感谢各位大佬和小白的支持,我们下期文章再见。

都看到这里了,给个三连呗,谢谢啦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值