网易首页 > 网易号 > 正文 申请入驻

C++中的外部模板及其在当前编译文件中的实例化

0
分享至

一、外部模板简介

在C++中,模板是一种泛型编程的工具,它允许程序员以一种类型无关的方式编写代码。然而,模板的一个常见问题是它们会导致编译时间增加,特别是在大型项目中,当多个源文件包含相同的模板实例化时,编译器会为每个源文件都生成一份模板实例的代码,这不仅增加了编译时间,还可能导致最终可执行文件体积的膨胀。

为了解决这个问题,C++引入了外部模板的概念。外部模板允许将模板的实例化代码放置在单独的文件中,并在链接时与其他编译单元共享,从而减少编译时间和可执行文件的大小。



二、外部模板的使用

外部模板的使用通常涉及两个步骤:声明和定义。

  1. 声明:在头文件中声明模板类和模板函数,但不进行实例化。
// MyTemplate.htemplateclass MyTemplate {public: MyTemplate(T value) : value_(value) {} void print() const { std::cout << "Value: " << value_ << std::endl; }private: T value_;};
  1. 定义与实例化:在一个单独的文件中实例化模板,并编译成目标文件(.o或.obj文件)。这个文件通常被称为“显式实例化文件”。
// MyTemplateImpl.cpp (或 .cxx, .cc 等)#include "MyTemplate.h"// 显式实例化模板类template class MyTemplate; // 实例化int类型的模板template class MyTemplate; // 实例化double类型的模板// 可以根据需要实例化更多类型...

然后,你需要编译这个文件以生成包含模板实例的目标文件。例如,使用g++编译器:

g++ -c MyTemplateImpl.cpp -o MyTemplateImpl.o

三、在当前编译文件中实例化模板

如果你希望在当前的编译文件中实例化模板,而不是使用外部模板文件,你可以直接在源文件中进行显式实例化。这通常在小型项目或快速原型设计中更为方便。

例如,在你的主源文件(如main.cpp)中:

#include "MyTemplate.h"int main() { // ... 你的代码 ... return 0;}// 在文件末尾显式实例化模板template class MyTemplate; // 在当前文件中实例化int类型的模板template class MyTemplate; // 在当前文件中实例化double类型的模板

这种方法的好处是简单直接,不需要额外的编译步骤或文件。然而,如果多个源文件都这样做,它可能会导致编译时间的增加和最终可执行文件体积的膨胀,因为每个源文件都会生成一份模板实例的代码。

四、注意事项

  • 当使用外部模板时,确保在链接时包含所有相关的目标文件,以便链接器能够找到所需的模板实例。
  • 外部模板主要用于优化编译时间和减少可执行文件大小。在小型项目或快速原型设计中,直接在源文件中实例化模板可能更为方便。
  • 当模板的参数类型非常复杂或数量很多时,外部模板的优势更加明显。
  • 在团队开发中,使用外部模板可以确保团队成员之间共享相同的模板实例,从而减少潜在的编译和链接问题。

总结

C++中的外部模板是一种优化编译时间和减少可执行文件大小的有效方法。通过将模板的实例化代码放置在单独的文件中,并在链接时与其他编译单元共享,可以避免在每个源文件中都生成模板实例的代码。然而,在小型项目或快速原型设计中,直接在源文件中实例化模板可能更为方便。在选择是否使用外部模板时,应根据项目的具体需求和约束进行权衡。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
快船核心球星伦纳德表示:我们要接受哈登的领导&他才是真正领袖

快船核心球星伦纳德表示:我们要接受哈登的领导&他才是真正领袖

小豆豆赛事
2024-04-30 11:45:20
沈梓捷新疆自驾游,李慕豪随行,邱彪新疆队招贤纳士新动向

沈梓捷新疆自驾游,李慕豪随行,邱彪新疆队招贤纳士新动向

小马哥谈体育
2024-05-01 03:49:09
私人影院提供特色观影服务?我试图前往体验,却发现掉入桃色陷阱

私人影院提供特色观影服务?我试图前往体验,却发现掉入桃色陷阱

亲爱的落落
2024-04-15 10:57:58
歇着吧!卢:莱昂纳德今日不参加球队训练 他G5将继续缺战

歇着吧!卢:莱昂纳德今日不参加球队训练 他G5将继续缺战

直播吧
2024-05-01 02:10:04
五一到了,别再说“节日快乐”,太土!教你10句祝福话,好听不俗

五一到了,别再说“节日快乐”,太土!教你10句祝福话,好听不俗

简食记工作号
2024-04-30 08:55:28
完整中国神仙系统。正宗道教认可的神仙,我的认知还停留在西游记

完整中国神仙系统。正宗道教认可的神仙,我的认知还停留在西游记

牛锅巴小钒
2024-04-30 14:55:39
持有美债出现两个极端:西方国家都在增加,发展中国家大多在减持

持有美债出现两个极端:西方国家都在增加,发展中国家大多在减持

小蜜情感说
2024-04-30 23:26:10
具俊晔,太扎心了!4月27日晚,大S的现任老公具俊晔突然上了热搜

具俊晔,太扎心了!4月27日晚,大S的现任老公具俊晔突然上了热搜

海梦游者
2024-04-28 15:15:56
1-3到8-7!小特或逆转,黑马单局8分,火箭连续作战,6冠王翻车?

1-3到8-7!小特或逆转,黑马单局8分,火箭连续作战,6冠王翻车?

刘姚尧的文字城堡
2024-05-01 05:58:22
朴志效玩周子瑜伤痛梗,引发粉丝不满,认为twice团魂像个笑话

朴志效玩周子瑜伤痛梗,引发粉丝不满,认为twice团魂像个笑话

娱乐寡姐
2024-04-29 22:45:47
“睡我老婆,一个都别想活!”妻子与两个堂哥有染,男子抄起AK47

“睡我老婆,一个都别想活!”妻子与两个堂哥有染,男子抄起AK47

我是斌哥哥
2024-03-22 12:54:12
问界M7撞死人,华为该背锅吗?

问界M7撞死人,华为该背锅吗?

虎嗅APP
2024-04-30 08:48:16
中建一局地产:请员工退还7年前的高额奖金

中建一局地产:请员工退还7年前的高额奖金

小豆豆赛事
2024-04-30 18:20:40
日本突发!崩了!

日本突发!崩了!

江南晚报
2024-04-30 09:23:46
从5799降至2998:小米最悲情的绝版传奇旗舰手机重获新生!

从5799降至2998:小米最悲情的绝版传奇旗舰手机重获新生!

奇奇怪怪的冒险
2024-05-01 04:38:20
周鸿祎990万卖出的迈巴赫是前妻的?三六零回应:他没驾照,登记在前妻公司

周鸿祎990万卖出的迈巴赫是前妻的?三六零回应:他没驾照,登记在前妻公司

每日经济新闻
2024-04-30 18:47:17
河南临颍通报“女子在避雷针塔上攀爬”:从塔顶部跳下抢救无效死亡

河南临颍通报“女子在避雷针塔上攀爬”:从塔顶部跳下抢救无效死亡

新京报
2024-04-30 10:42:34
集结沙特!陈梦靓眼,平野美宇被指老气,樊振东把王楚钦比下去了

集结沙特!陈梦靓眼,平野美宇被指老气,樊振东把王楚钦比下去了

开心体育站
2024-05-01 00:51:50
2024最差危机公关?为“保护”华为问界M7和博世上演智驾罗生门?

2024最差危机公关?为“保护”华为问界M7和博世上演智驾罗生门?

摩根商研所
2024-04-30 00:56:46
95岁老人被银行冻结30万,不料老人政法系毕业,结果令银行傻眼

95岁老人被银行冻结30万,不料老人政法系毕业,结果令银行傻眼

谈史论天地
2024-04-30 11:50:03
2024-05-01 06:40:49
鲨鱼编程
鲨鱼编程
懂点技术,懂点编程
423文章数 153关注度
往期回顾 全部

科技要闻

余承东卸任华为终端CEO 新任命为董事长

头条要闻

英方称将完全移除敏感场地的中国监控设备 中使馆回应

头条要闻

英方称将完全移除敏感场地的中国监控设备 中使馆回应

体育要闻

诺伊尔:今天氛围很好让我想起了12年决赛;我们想去温布利

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

查道炯:中国经济的外部挑战与应对思考

汽车要闻

越野老炮最爱 哈弗新H9新增2.4T柴油机

态度原创

房产
时尚
数码
亲子
军事航空

房产要闻

刺激!市区惊现1.1w/㎡新房+现房!海口楼市,五一打响价格战!

岁月不败美人,姐姐们的50岁也太好看了

数码要闻

基于Arm的联想ThinkPad X13s笔记本将得到Ubuntu官方的持续支持

亲子要闻

4岁萌娃跳街舞,不仅会卡点 而且动作记得住

军事要闻

以官员:以总理求助拜登阻止逮捕令

无障碍浏览 进入关怀版