【C++初阶】:模板进阶 雨点打透心脏的1/2处 2024-03-18 00:20 121阅读 0赞 #### 模板进阶 #### * 一.非类型模板参数 * 二.模板的特化 * * 1.概念 * 2.函数模板特化 * 3.类的特化 * * 1.全特化 * 2.偏特化 * 三.模板的分离编译 ## 一.非类型模板参数 ## > **模板参数分类类型形参与非类型形参。 > 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 > 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用** *一个例子* ![在这里插入图片描述][afad5dbc792d47eb99a1616431d171c4.png] > **这里的T就是类型模板参数,N就是非类型模板参数。** ![在这里插入图片描述][e1e00dcd924c45b088e14bf07ccba94e.png] ## 二.模板的特化 ## ### 1.概念 ### > **通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理。例如下面一个比较函数。** ![在这里插入图片描述][d71469e4ab58443094cc656c76aee7f8.png] > **此时,就需要对模板进行特化。即:在原模板类的基础上,针对特殊类型所进行特殊化的实现方式。模板特化中分为函数模板特化与类模板特化。** ### 2.函数模板特化 ### > **函数模板的特化步骤:** > **1. 必须要先有一个基础的函数模板 > 2. 关键字template后面接一对空的尖括号<> > 3. 函数名后跟一对尖括号,尖括号中指定需要特化的类型 > 4. 函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇怪的错误。** ![在这里插入图片描述][2aade1eee65d445cafd79e5807bca204.png] ### 3.类的特化 ### > **类的特化有两种,全特化和偏特化。** #### 1.全特化 #### > **全特化即是将模板参数列表中所有的参数都确定化。** ![在这里插入图片描述][5b983cff20d6417899b8c14eec091cf7.png] ![在这里插入图片描述][3bfdef96e1c34797b83580622ca1c25f.png] #### 2.偏特化 #### *部分特化* *将模板参数类表中的一部分参数特化* ![在这里插入图片描述][fc69f7fc6b194858895eb0078e12b871.png] *参数更进一步的限制* *偏特化并不仅仅是指特化部分参数,而是针对模板参数更进一步的条件限制所设计出来的一个特化版本* ![在这里插入图片描述][f36fa8690d5f40d2b4361deeca0bb124.png] ## 三.模板的分离编译 ## > **一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链 > 接起来形成单一的可执行文件的过程称为分离编译模式。** *假如有以下场景,模板的声明与定义分离开,在头文件中进行声明,源文件中完成定义:* **在test.h里声明。** ![在这里插入图片描述][92f29af77d0d4dfc8af8d69585c0967a.png] **在test.cpp里定义。** ![在这里插入图片描述][0608d7bbafa645f5acaedb58a5fbcae4.png] **在mian.cpp里调用** ![在这里插入图片描述][478a6479575a4f0b8604906ca62da973.png] ![在这里插入图片描述][d3ac85e702164945a0f050dec5bdb84d.png] ![在这里插入图片描述][998d760a83e64dba977b02d48a8937ee.png] > **也就是在使用模板时,编译器不知道具体类型,所以无法形成有效地址,最终在链接时无法找到地址。** ![在这里插入图片描述][044d6e8886164d5d8080ed33b590aba9.png] [afad5dbc792d47eb99a1616431d171c4.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/bff7ecc5f12445239c39837feaa48ea9.png [e1e00dcd924c45b088e14bf07ccba94e.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/92fed48ff00140baa57560cb90b1721e.png [d71469e4ab58443094cc656c76aee7f8.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/189a899866ec404b8843cbcb1ef4efc7.png [2aade1eee65d445cafd79e5807bca204.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/0e1de09990f842259e5cac7fcdf3e169.png [5b983cff20d6417899b8c14eec091cf7.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/4a11b7a6cafe4d84a8f0837ed538b146.png [3bfdef96e1c34797b83580622ca1c25f.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/42309e8f803740bdaf9c2f8b29c7223e.png [fc69f7fc6b194858895eb0078e12b871.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/a2af48e3ab0540b9a0ceec8f69ec37a2.png [f36fa8690d5f40d2b4361deeca0bb124.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/ca21c9a99af74f0eb56eeedbce87c85a.png [92f29af77d0d4dfc8af8d69585c0967a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/9a21f443c49e4ed9a794d1e80cd51c12.png [0608d7bbafa645f5acaedb58a5fbcae4.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/0ac3e70a786c4f8aa7123558433b6eec.png [478a6479575a4f0b8604906ca62da973.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/1a048bc54a0242108c3f6eb483748656.png [d3ac85e702164945a0f050dec5bdb84d.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/4cf0e249d2c646c6bd4aa323685454a5.png [998d760a83e64dba977b02d48a8937ee.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/8257cc23f781414d984b9904ccc5708f.png [044d6e8886164d5d8080ed33b590aba9.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/14/5f8f3ec8b7ad4703a99cc1eab5c99ad6.png
相关 c++模板初阶 前言 在我们学习c语言中,我们发现很多逻辑一样但函数的数据类型不一样,我们都需重新写,这样就有点代码冗余了。当来到了c++就可以很好的解决这一问题,运用模板。这个模板其实 逃离我推掉我的手/ 2024年04月01日 17:47/ 0 赞/ 104 阅读
相关 【C++】模板进阶 文章目录 模板进阶 1. 非类型模板的参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 Love The Way You Lie/ 2024年03月23日 11:21/ 0 赞/ 78 阅读
相关 【C++初阶】:模板初阶 模板初阶 一.函数模板 1.简单使用 2.模板原理 3.函数模板的实例化 4.模板参数的匹配原则 二.类 短命女/ 2024年03月22日 19:12/ 0 赞/ 102 阅读
相关 【C++初阶】:模板进阶 模板进阶 一.非类型模板参数 二.模板的特化 1.概念 2.函数模板特化 3.类的特化 1.全特化 雨点打透心脏的1/2处/ 2024年03月18日 00:20/ 0 赞/ 122 阅读
相关 【C++】模板进阶 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参:出现在模块参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参:用一个常量 妖狐艹你老母/ 2023年07月17日 09:51/ 0 赞/ 16 阅读
相关 【C++】模板进阶 模板进阶 1.非类型模板参数 2. 模板的特化 2.1 函数模板特化 2.2 类模板特化 2.2.1 全特化 ╰+攻爆jí腚メ/ 2022年10月30日 09:30/ 0 赞/ 178 阅读
相关 模板初阶 一、泛型编程 1、函数重载的缺点: (1)重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数 (2)代码的可维护性比较低,一个 拼搏现实的明天。/ 2022年03月21日 04:30/ 0 赞/ 228 阅读
相关 【C++】模板初阶 文章目录 一、泛型编程 二、函数模板 1.函数模板概念 2.函数模板格式 3.函数模板的实例化 三、类模板 本是古典 何须时尚/ 2021年09月09日 03:40/ 0 赞/ 375 阅读
还没有评论,来说两句吧...