Partager via


Instanciation du modèle de classe

Contrairement aux modèles de fonction, en instanciant un modèle de classe, vous devez instancier explicitement la classe en fournissant des arguments pour les modèles de classe.pour créer une instance d' TempClass:

TempClass< float, 6 > test1;       // OK
TempClass< char, items++ > test2;  // Error, second parameter 
                                   // must be constant.

Le compilateur génère le code d'une classe ou une fonction de modèle lorsque la classe ou la fonction est instanciée.Une fonction membre est instanciée lorsqu'elle est appelée, et une fonction membre virtuelle est instanciée lorsque sa classe est créée.Cela peut provoquer des problèmes si vous générez une bibliothèque avec des modèles pour d'autres utilisateurs.Pour plus d'informations, consultez l' instanciation explicite.

Un modèle de classe est d'abord spécialisé puis instancié par le compilateur.Le compilateur ne peut instancier le modèle de classe jusqu'à ce qu'une référence à un membre de cette classe de modèle soit effectuée, sizeof est utilisé sur la classe, ou une instance est créée.

une spécialisation explicite d'un modèle est une version personnalisée du modèle pour un type particulier.

// template_instantiation2.cpp
template<class T> class X
{
};

// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}

La spécialisation explicite sans template<> génère une erreur.les versions de Visual C++ avant Visual C++.NET 2003 ont reçu cette syntaxe :

// Explicit specialization of X with 'char'
class X<char> // C2906
{
};

Si un modèle est explicitement instancié ou une fois spécialisé, il ne peut pas être explicitement instancié ou non spécialisé une deuxième fois dans le même programme pour le même ensemble d'arguments template.Il permet d'autres spécialisations avec des arguments template.

S'il n'y a pas d'instanciation ou une spécialisation explicite pour un argument template particulier, le modèle est implicitement instancié au point où elle est utilisé pour la première fois.

Étant donné que les instanciations différentes du même modèle sont différents types, des membres statiques d'une spécialisation ou instanciation d'un modèle sont séparés des membres statiques pour une spécialisation ou une instanciation différente du même modèle.

Voir aussi

Référence

Modèles de classe