有关于模板的分离编译

模板分为模板类和模板函数。

分析为什么模板不支持分离编译?

首先,定义模板类需要template,而定义模板的目的就是为了在写代码的时候不需要考虑代码的多种类型,重复率高的代码段,降低效率还增加编译器的复杂性,为追求更高效的代码编译方法,使用模板来编写代码。
其次,既然是模板,在可以重复利用的代码段就不会考虑数据类型,但是当函数调用时候,即需要数据参与的时候就需要对模板实例化,这时候如果分离编译,就不能将利用模板所写的函数进行实例化,所写的模板函数就实际上没有被调用。
这里写图片描述

这里写图片描述
这里写图片描述
我们可以分析,当程序从main函数进入,看到有Test()函数的调用,自然会去找函数,由存在main函数的.cpp文件中所包含的Test.h头文件展开,就找到Test()函数,此函数又是将模板实例化,调用类内的PushBack()以及Pop()函数,但是类内只有这两个函数的声明,没有具体的函数实现,当实例化后也就需要连接具体的函数实现,自然要找函数代码,但是这里连接器找不到具体的函数实现,因为在模板类中,模板没有被实例化,编译器也不会自动再为你实例化找函数,所以就找不到函数存在的另外的.cpp文件,自然就会出错,出现连接错误。
所以模板不能分离编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值