首页 >后端开发 >C++ >`extern template` 如何防止 C 中的冗余模板实例化?

`extern template` 如何防止 C 中的冗余模板实例化?

Barbara Streisand
Barbara Streisand原创
2024-12-20 20:42:09501浏览

How Can `extern template` Prevent Redundant Template Instantiation in C  ?

使用 extern 模板避免模板实例化

模板实例化是 C 编程中至关重要的一步,在编译时创建特定的模板实例。在某些场景下,有必要控制模板实例化以优化编译时间并避免冗余定义。这就是 extern template 关键字发挥作用的地方。

函数模板的 Extern 模板

与函数模板一起使用时,extern 模板指示编译器不要实例化指定的当前翻译单元内的模板。它表明该模板的实例将在程序的其他地方找到。这在多个源文件使用相同参数实例化同一模板的情况下特别有用,从而导致编译器必须丢弃多个定义。

示例:

考虑以下代码片段:

在这种情况下,source2.cpp 中的 extern 模板通知编译器f模板实例化应该从其他地方获取。这可以防止编译器生成冗余实例化并在稍后链接期间将其丢弃。

类模板的外部模板

与函数模板类似,也可以使用 extern 模板与类模板。这样做是为了避免使用相同参数多次实例化模板类。

示例:

这里,source2.cpp 中的 extern 模板确保MyClass;模板类仅实例化一次,防止冗余定义。

使用 extern 模板的指南

  • 仅当您确定该类的实例化时才使用 extern 模板模板存在于程序的其他地方。
  • 这种技术可以应用于函数模板、类模板,甚至模板成员
  • 通常建议将所有模板定义和实例化保留在一个头文件中,以避免潜在的冲突。
  • 如果无法集中模板定义,请在所有模板中使用 extern 模板但有一个使用模板的源文件。

以上是`extern template` 如何防止 C 中的冗余模板实例化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn