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

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

Patricia Arquette
发布: 2024-12-12 21:52:14
原创
180 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板