Partager via


Instanciation explicite

Vous pouvez utiliser l'instanciation explicite pour créer une instanciation d'une classe ou fonction modélisée sans réellement l'utiliser dans votre code. Puisque c'est utile lorsque vous créez des fichiers bibliothèque (.lib) qui utilisent des modèles pour la distribution, les définitions de modèle non instanciées ne sont pas stockées dans des fichiers objet (.obj).

Ce code instancie explicitement MyStack pour les variables int et six éléments :

template class MyStack<int, 6>;

Cette instruction crée une instanciation de MyStack sans réserver d'espace de stockage pour un objet. Le code est généré pour tous les membres.

La ligne suivante instancie explicitement uniquement la fonction membre du constructeur :

template MyStack<int, 6>::MyStack( void );

Vous pouvez explicitement instancier des modèles de fonction à l'aide d'un argument de type spécifique pour les redéclarer, comme indiqué dans l'exemple Instanciation du modèle de fonction.

Utilisez le mot clé extern pour empêcher l'instanciation automatique des membres. Par exemple :

extern template class MyStack<int, 6>;

De même, vous pouvez marquer des membres spécifiques comme étant externes et non instanciés :

extern template MyStack<int, 6>::MyStack( void );

Utilisez le mot clé extern pour empêcher le compilateur de générer le même code d'instanciation dans plus d'un module objet. Vous devez instancier la fonction de modèle en utilisant les paramètres de modèle explicites spécifiés dans au moins un module lié si la fonction est appelée, ou vous obtiendrez une erreur de l'éditeur de liens lorsque le programme est généré.

Notes

Le mot clé extern de la spécialisation s'applique uniquement aux fonctions membres définies en dehors du corps de la classe.Les fonctions définies dans la déclaration de classe sont considérées comme des fonctions incluses et sont toujours instanciées.

Voir aussi

Référence

Modèles de fonctions