Utilisation d'un modèle externe pour éviter l'instanciation de modèle (C 11)
Dans la programmation orientée objet, les modèles jouent un rôle crucial dans la fourniture de solutions génériques qui fonctionnent avec différents types de données. Cependant, lorsque plusieurs fichiers sources instancient des modèles avec les mêmes paramètres, cela peut conduire à plusieurs définitions et à une augmentation du temps de compilation.
Le mot-clé extern template peut être utilisé pour résoudre ce problème et éviter une instanciation de modèle inutile. Il demande au compilateur de ne pas instancier une spécialisation de modèle particulière dans l'unité de traduction actuelle. Au lieu de cela, le compilateur s'appuie sur l'instanciation du modèle dans un autre fichier source ou une bibliothèque liée.
Modèles de fonction
Lorsqu'il s'agit de modèles de fonction, un modèle externe peut être utilisé pour forcer l’exclusion de l’instanciation explicite du modèle. Par exemple, considérons l'extrait de code suivant :
// header.h template<typename T> void f(); // source1.cpp #include "header.h" void f<int>(); // Explicit instantiation // source2.cpp #include "header.h" extern template void f<int>(); // Prevents explicit instantiation void g() { f<int>(); }
Dans ce scénario, source1.cpp instancie explicitement f
Modèles de classe
Le même principe s'applique aux modèles de classe. extern template peut être utilisé pour éviter plusieurs instanciations de la même classe de modèle avec les mêmes paramètres. Prenons l'exemple suivant :
// header.h template<typename T> class foo { public: void f(); }; // source1.cpp #include "header.h" template class foo<int>; // Explicit instantiation // source2.cpp #include "header.h" extern template class foo<int>; // Prevents explicit instantiation void h() { foo<int> obj; }
Ici, le modèle extern dans source2.cpp empêche l'instanciation explicite de foo
Avantages de l'utilisation d'un modèle externe
L'utilisation d'un modèle externe offre plusieurs avantages :
Conclusion
extern template est un mot-clé puissant qui permet aux développeurs de contrôler l'instanciation du modèle et d'optimiser la compilation temps. En l'utilisant judicieusement, les développeurs peuvent garantir que les modèles sont utilisés efficacement et éviter les pièges des instanciations multiples, ce qui se traduit par une compilation plus rapide et des exécutables plus petits.
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!