首页 >后端开发 >C++ >外部模板如何优化 C 中的模板实例化?

外部模板如何优化 C 中的模板实例化?

Patricia Arquette
Patricia Arquette原创
2024-12-12 21:52:14181浏览

How Can Extern Templates Optimize Template Instantiation in C  ?

使用 Extern Template 优化模板实例化

在 C 11 中,extern template 是一个强大的关键字,可以用来避免冗余实例化模板,特别是当多个翻译单元(例如 .cpp 文件)可能包含包含模板的同一头文件时

Extern 模板的概念

Extern 模板本质上通知编译器当前翻译单元不应该实例化特定模板,即使它是在包含的模板中声明的标头。当您知道模板将在同一项目的不同翻译单元中实例化时,这非常有用。

函数模板的用法

对于函数模板,外部模板声明可以如下使用:

#include "header.h"
extern template void f<T>(); // Avoid instantiation in this translation unit

这表明 f 模板将在项目的其他地方定义,不应该被定义在当前文件中实例化。

类模板的使用

类似地,对于类模板,外部模板声明采用以下形式:

#include "header.h"
extern template class foo<int>; // Avoid instantiation in this translation unit

这确保了 foo 模板类不会在此特定翻译中实例化

优化应用

考虑以下场景:

// header.h
template<typename T>
void f();
// source1.cpp
#include "header.h"
void f<int>();
// source2.cpp
#include "header.h"
void f<string>();

没有 extern template,两个 source1.cpp而source2.cpp会实例化f模板,导致多个定义,浪费编译时间。通过在其中一个文件中使用 extern 模板,我们可以避免这种冗余:

// source1.cpp
#include "header.h"
void f<int>();
// source2.cpp
#include "header.h"
extern template void f<int>();
void f<string>();

要点

  • 仅当您确定该模板将在项目的其他地方实例化。
  • 它适用于函数模板和类模板,因为以及模板成员函数。
  • 使用 extern 模板可以显着减少编译时间并优化目标文件大小,特别是在使用大型或频繁使用的模板时。

以上是外部模板如何优化 C 中的模板实例化?的详细内容。更多信息请关注PHP中文网其他相关文章!

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