C++中模板的编译过程

C++分离式编译

就我最常用的vs来说,对于每个cpp都是独立编译再进行链接的。而为了保证一个cpp能调用另一个cpp而不会导致另一个被编译两次(include另一个文件会在预处理时展开并参与编译),一般都会将类和函数的声明写在h文件中并在cpp中include。所以一般的类和函数都会在编译时确定它的声明但没有定义,会留到链接时与其他文件中的定义进行链接。

模板的问题

所以根据分离式编译,模板就不能声明在.h中而在cpp中定义了。因为模板在编译时不会直接根据定义生成代码,而是根据相应的实例生成对应类型的代码。

如果采用分离式编译,在一个cpp中调用了另一个文件的模板类或函数而只include了.h文件,这时本cpp只有这个模板的声明而没有定义,编译器会想处理其他函数一样等待链接时找到定义。然而被调用的模板类或函数的定义写在cpp中,被独自编译,所以其中并没有具体实现,不会被编译成具体的代码。最终导致在链接过程中,调用模板的文件找不到能链接的定义,所以就会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值