【C++】模板进阶
温馨提示:这篇文章已超过391天没有更新,请注意相关的内容是否还可用!
👀樊梓慕:个人主页
🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》
🌝每一个不曾起舞的日子,都是对生命的辜负
目录
前言
1.非类型模板参数
2.模板的特化
2.1函数模板特化
2.2类模板特化
2.2.1全特化
2.2.2偏特化
3.模板的分离编译
4.模板总结
前言
本篇文章博主会与大家共同学习非类型模板参数、类模板的特化以及模板的分离编译相关内容。
欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。
=========================================================================
GITEE相关代码:🌟fanfei_c的仓库🌟
=========================================================================
1.非类型模板参数
我们之前学习的模板,知道模板参数一般都是『 类型』。
可是还存在有一种模板参数是非类型的,这种参数被称为非类型模板参数,一般为常量,或者说是『 整型常量』。
- 类型形参: 出现在模板参数列表中,跟在class或typename关键字之后的参数类型名称。
- 非类型形参: 用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。
比如:
template //N:非类型模板参数 class StaticArray { public: size_t arraysize() { return N; } private: T _array[N]; //利用非类型模板参数指定静态数组的大小 };非类型模板参数基本上是用来定义数组或某种个数值。
注意:
- 非类型模板参数只允许使用整型家族,浮点数、类对象以及字符串是不允许作为非类型模板参数的。
- 非类型的模板参数在编译期就需要确认结果,因为编译器在编译阶段就需要根据传入的非类型模板参数生成对应的类或函数。
2.模板的特化
特化可以理解为『 特殊处理』,即当模板参数为某一种指定类型时, 不走默认的模板,而走我们为该类型单独设计的模板。
比如:
下面是用于比较两个任意相同类型的数据是否相等的函数模板。
template bool Equals(T x, T y) { return x == y; }在以下场景,可以正确的使用;
cout
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

