Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.