Instanciation explicite
L'instanciation explicite vous permet de créer une instanciation d'une classe ou d'une fonction basée sur un modèle sans réellement en l'utilisant dans votre code.Étant donné que 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 mises en fichiers de l'objet (.obj).
Le code suivant instancie explicitement MyStack pour les variables d' int et six éléments :
template class MyStack<int, 6>;
Cette instruction crée une instanciation d' MyStack sans réserver tout stockage d'un objet ; le code est généré pour tous les membres.
Le code suivant instancie explicitement uniquement la fonction membre du constructeur :
template MyStack<int, 6>::MyStack( void );
Les modèles de fonctions peuvent être explicitement instanciés par les rédeclarant avec un argument de type spécifique, comme indiqué dans l'exemple de Instanciation du modèle de fonction.
Spécifique à Microsoft
Vous pouvez utiliser le mot clé d' extern pour empêcher l'instanciation automatique des membres.Par exemple :
extern template class MyStack<int, 6>;
De même, vous pouvez marquer les membres spécifiques comme étant externe et non instancié comme suit :
extern template MyStack<int, 6>::MyStack( void );
[!REMARQUE]
Le mot clé d' extern dans la spécialisation s'applique uniquement aux fonctions membres définies en dehors de le corps de la classe.Des 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.