vso*_*tco 4 c++ linker templates
假设我有模板代码MyHeader.h,然后包含在2个编译单元中,A.cpp并且B.cpp.这两个文件然后实例化相同的模板函数,比如说f<int>();(后者定义非内联MyHeader.h).
据我所知,发生的事情如下.编译器生成的代码f<int>();在两个A.obj和B.obj,则类似器丢弃在连接阶段中的符号之一.
我的问题:这种做法总是"安全"吗?也就是说,是否会有抱怨重复符号的连接符?标准是否对此有所说明?如果是的话,我找不到任何解决方案来制作我的所有模板功能inline.
这始终是安全的,并由ODR涵盖.§3.2/ 6:
在程序中可以有多个非静态函数模板(14.5.6)[...]的定义,前提是每个定义出现在不同的翻译单元中,并且定义满足以下要求.[...长列表...] 如果
D满足所有这些要求的定义,那么行为就好像有一个单一的定义D.如果定义D不满足这些要求,那么行为是不确定的.
如果你写出合理的代码,我应该满足我跳过的需求列表.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |