Maison > développement back-end > C++ > Comment les modèles externes peuvent-ils optimiser l'instanciation de modèles en C ?

Comment les modèles externes peuvent-ils optimiser l'instanciation de modèles en C ?

Patricia Arquette
Libérer: 2024-12-12 21:52:14
original
180 Les gens l'ont consulté

How Can Extern Templates Optimize Template Instantiation in C  ?

Utilisation d'un modèle externe pour optimiser l'instanciation de modèle

En C 11, extern template est un mot-clé puissant qui peut être utilisé pour éviter l'instanciation redondante de modèles, en particulier lorsque plusieurs unités de traduction (par exemple, fichiers .cpp) peuvent inclure le même fichier d'en-tête contenant le modèle définitions.

Concept de modèle externe

Le modèle externe informe essentiellement le compilateur que l'unité de traduction actuelle ne doit pas instancier un modèle spécifique, même s'il est déclaré dans le fichier inclus. en-tête. Ceci est utile lorsque vous savez que le modèle sera instancié dans une unité de traduction différente du même projet.

Utilisation des modèles de fonctions

Pour les modèles de fonctions, un fichier externe La déclaration de modèle peut être utilisée comme suit :

#include "header.h"
extern template void f<T>(); // Avoid instantiation in this translation unit
Copier après la connexion

Cela indique que le modèle f sera défini ailleurs dans le projet et ne doit pas être instancié dans le projet actuel.

Utilisation pour les modèles de classe

De même, pour les modèles de classe, une déclaration de modèle externe prend la forme suivante :

#include "header.h"
extern template class foo<int>; // Avoid instantiation in this translation unit
Copier après la connexion

Cela garantit que la classe de modèle foo n'est pas instanciée dans cette unité de traduction particulière.

Optimisation Applications

Considérez le scénario suivant :

// header.h
template<typename T>
void f();
Copier après la connexion
// source1.cpp
#include "header.h"
void f<int>();
Copier après la connexion
Copier après la connexion
// source2.cpp
#include "header.h"
void f<string>();
Copier après la connexion

Sans modèle externe, source1.cpp et source2.cpp instancieront le modèle f, conduisant à plusieurs définitions et perte de temps de compilation. En utilisant un modèle externe dans l'un des fichiers, nous évitons cette redondance :

// source1.cpp
#include "header.h"
void f<int>();
Copier après la connexion
Copier après la connexion
// source2.cpp
#include "header.h"
extern template void f<int>();
void f<string>();
Copier après la connexion

Points clés

  • Utilisez le modèle externe uniquement lorsque vous sont certains que le modèle sera instancié ailleurs dans le projet.
  • Il s'applique à la fois aux modèles de fonction et aux modèles de classe, ainsi qu'aux membres du modèle fonctions.
  • L'utilisation d'un modèle externe peut réduire considérablement le temps de compilation et optimiser la taille du fichier objet, en particulier lorsque vous travaillez avec des modèles volumineux ou fréquemment utilisés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal