C++中的extern template有什么特殊用途?
- 内容介绍
- 文章标签
- 相关推荐
extern template 是 C++11 引入的一项调整特性,专门用于控制模板实例化的时机和位置。它可以显式声明某个模板专门化在当前翻译单元中不需要生成实例,而把实例化工作交给其它 TU 来完成。怎么说呢,
至于使用者痛点,编译时间与二进制体积爆炸
在大型项目中,同一个模板被多文件引用时每个文件都会触发一次隐式实例化。导致:
- 编译时间显著增长。
- 目标文件中出现重复代码,最终二进制体积膨胀。
这些问题在持续集成、频繁迭代开发还有资源受限设备上尤为突出。
说到主要概念,声明 vs 定义
extern template class MyTemplate
template class MyTemplate;// 明确实例化定义
注意:
- 声明与定义必须出现在不同的 TU。老实说,
- 如果同一 TU 同时出现声明和定义。则定义会覆盖声明,否则会导致链接错误。说起来,
至于示例。
extern template 是 C++11 引入的一项调整特性,专门用于控制模板实例化的时机和位置。它可以显式声明某个模板专门化在当前翻译单元中不需要生成实例,而把实例化工作交给其它 TU 来完成。怎么说呢,
至于使用者痛点,编译时间与二进制体积爆炸
在大型项目中,同一个模板被多文件引用时每个文件都会触发一次隐式实例化。导致:
- 编译时间显著增长。
- 目标文件中出现重复代码,最终二进制体积膨胀。
这些问题在持续集成、频繁迭代开发还有资源受限设备上尤为突出。
说到主要概念,声明 vs 定义
extern template class MyTemplate
template class MyTemplate;// 明确实例化定义
注意:
- 声明与定义必须出现在不同的 TU。老实说,
- 如果同一 TU 同时出现声明和定义。则定义会覆盖声明,否则会导致链接错误。说起来,

