Partager via


Instanciation explicite

Vous pouvez utiliser l’instanciation explicite pour créer une instanciation d’une classe ou d’une fonction modèle sans l’utiliser dans votre code. Étant donné qu’il est utile lorsque vous créez des fichiers de bibliothèque (.lib) qui utilisent des modèles pour la distribution, les définitions de modèle non existantes ne sont pas placées dans des fichiers objet (.obj).

Exemples

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

template class MyStack<int, 6>;

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

La ligne suivante instancie explicitement la fonction membre du constructeur :

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

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

Vous pouvez utiliser le extern mot clé 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 );

Vous pouvez utiliser le extern mot clé pour empêcher le compilateur de générer le même code d’instanciation dans plusieurs modules d’objet. Vous devez instancier le modèle de fonction à l’aide des paramètres de modèle explicite spécifiés dans au moins un module lié si la fonction est appelée. Sinon, vous obtenez une erreur d’éditeur de liens lorsque le programme est généré.

Remarque

Le extern mot clé de la spécialisation s’applique uniquement aux fonctions membres définies en dehors du corps de la classe. Les fonctions définies à l’intérieur de la déclaration de classe sont considérées comme des fonctions inline et sont toujours instanciées.

Voir aussi

Modèles de fonction