C++中的extern template有什么特殊用途?

更新于
2026-08-19 17:50:08
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

extern template 是 C++11 引入的一项调整特性,专门用于控制模板实例化的时机和位置。它可以显式声明某个模板专门化在当前翻译单元中不需要生成实例,而把实例化工作交给其它 TU 来完成。怎么说呢,

至于使用者痛点,编译时间与二进制体积爆炸

在大型项目中,同一个模板被多文件引用时每个文件都会触发一次隐式实例化。导致:

C++中的extern template有什么特殊用途?
  • 编译时间显著增长。
  • 目标文件中出现重复代码,最终二进制体积膨胀。

这些问题在持续集成、频繁迭代开发还有资源受限设备上尤为突出。

说到主要概念,声明 vs 定义

extern template class MyTemplate; 此语句告诉编译器:"不要在当前 TU 里生成 MyTemplate". 随后在别处使用:

template class MyTemplate;// 明确实例化定义

注意:

C++中的extern template有什么特殊用途?
  • 声明与定义必须出现在不同的 TU。老实说,
  • 如果同一 TU 同时出现声明和定义。则定义会覆盖声明,否则会导致链接错误。说起来,

至于示例。

阅读全文
标签:标准

extern template 是 C++11 引入的一项调整特性,专门用于控制模板实例化的时机和位置。它可以显式声明某个模板专门化在当前翻译单元中不需要生成实例,而把实例化工作交给其它 TU 来完成。怎么说呢,

至于使用者痛点,编译时间与二进制体积爆炸

在大型项目中,同一个模板被多文件引用时每个文件都会触发一次隐式实例化。导致:

C++中的extern template有什么特殊用途?
  • 编译时间显著增长。
  • 目标文件中出现重复代码,最终二进制体积膨胀。

这些问题在持续集成、频繁迭代开发还有资源受限设备上尤为突出。

说到主要概念,声明 vs 定义

extern template class MyTemplate; 此语句告诉编译器:"不要在当前 TU 里生成 MyTemplate". 随后在别处使用:

template class MyTemplate;// 明确实例化定义

注意:

C++中的extern template有什么特殊用途?
  • 声明与定义必须出现在不同的 TU。老实说,
  • 如果同一 TU 同时出现声明和定义。则定义会覆盖声明,否则会导致链接错误。说起来,

至于示例。

阅读全文
标签:标准