当前位置:首页 » 《休闲阅读》 » 正文

【C++打怪之路Lv12】-- 模板进阶

29 人参与  2024年10月27日 19:20  分类 : 《休闲阅读》  评论

点击全文阅读


#1024程序员节|征文#

? 个人主页:白子寰
? 分类专栏:重生之我在学Linux,C++打怪之路,python从入门到精通,数据结构,C语言,C语言题集? 希望得到您的订阅和支持~
? 坚持创作博文(平均质量分82+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~)

目录

 模板参数

模板的特化

概念

函数模板的特化 

 使用场景

注意事项

类模板特化

全特化

偏特化

模板分离编译


 模板参数



模板的特化

概念

模板特化是为模板提供一个特殊版本,这个版本仅适用于特定的模板参数。

函数模板的特化 

例如,一个通用的模板函数可能有一个专门为int类型定制的特化版本 

template<class T>void fun(T t){cout << "通用版本" << endl;}template<>void fun<int>(int t){cout << "特化版本" << endl;}int main(){fun(1);// 特化版本fun<int>(6);// 特化版本fun(6.8);// 通用版本return 0;}

 使用场景

1、当某个特定类型需要不同的处理逻辑时。
2、优化:为特定类型提供更高效的算法


注意事项

1、特化版本不能独立于原始模板存在。
2、不能有多个相同的特化版本



类模板特化

全特化

1、定义:全特化是指为类模板的所有模板参数提供具体的类型

2、为什么要使用全特化:当需要对某个特定类型组合提供专门的实现,以优化性能或处理特定逻辑时,使用全特化


偏特化

1、定义:偏特化是指为类模板的部分模板参数提供具体的类型

2、为什么要用偏特化:当只需要对模板参数的某部分进行特化,而不是全部参数时,使用偏特化



模板分离编译

在分离编译模式下,一个程序由多个源文件分别编译成目标文件后再链接为可执行文件。

而对于模板,它可以在同一文件中实现声明和定义分离,但如果将模板的声明和定义放在不同文件中,会由于模板的特殊实现机制在链接阶段出现链接错误。

这是因为模板的实例化需要在使用模板的地方进行,而不同文件编译时可能无法正确识别和处理模板的实例化需求

在 C++ 程序运行过程中,通常经历预处理、编译、汇编和链接等步骤。

分离编译时,普通函数在编译阶段会生成地址和汇编代码,链接阶段可通过该地址调用函数。

然而对于模板,在未实例化之前,编译器不会生成具体函数及对应的地址。所以在链接阶段,若模板的声明和定义分别在不同文件,由于找不到具体函数地址就会发生链接错误。

因此,若要进行模板的分离编译,必须将模板的声明和定义放在同一个文件中,以确保在需要实例化时能够正确生成函数并被链接器正确处理 




***********************************************************分割线*****************************************************************************
完结!!!
感谢浏览和阅读。

等等等等一下,分享最近喜欢的一句话:

“要么被爱唤醒,要么被痛唤醒。”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。


点击全文阅读


本文链接:http://zhangshiyu.com/post/178715.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1