Partager via


Modèles et résolution de noms

Dans les définitions de modèle, il existe trois types de noms.

  • Noms localement déclarés, notamment le nom du modèle lui-même et tous les noms déclarés dans la définition de modèle.

  • Noms de la portée englobante à l'extérieur de la définition de modèle.

  • Noms qui dépendent d'une certaine façon les arguments template, appelés noms dépendants.

Bien que les deux premiers noms sont liées également des portées de classes et les fonctions, des règles spécifiques pour la résolution de noms sont requises dans les définitions de modèle pour gérer la complexité ajouté des noms dépendants.Cela est dû au fait que le compilateur sait pas ces noms jusqu'à ce que le modèle a été instancié, parce qu'ils peuvent être des types complètement différents selon lesquels les arguments template sont utilisés.Les noms de Nondependent sont recherchés selon les règles habituelles et au point de définition du modèle.Ces noms, qui est indépendant des arguments template, sont une fois pour toutes trouvent les spécialisations de modèle.Les noms dépendants ne sont pas détectés jusqu'à ce que le modèle a été instancié et sont recherchés séparément pour chaque spécialisation.

un type est dépendant s'il dépend des arguments template.Plus particulièrement, un type est dépendant s'il est :

  • l'argument template lui-même :

    T
    
  • Un nom qualifié avec une qualification y compris un type dépendant :

    T::myType
    
  • Un nom qualifié si la partie non qualifiée identifie un type dépendant :

    N::T
    
  • Un type const ou volatile pour lequel le type de base est un type dépendant :

    const T
    
  • Un pointeur, une référence, un tableau, ou un type de pointeur fonction basé sur un type dépendant :

    T *, T &, T [10], T (*)()
    
  • Un tableau dont la taille est basé sur un paramètre de modèle :

    template <int arg> class X {
    int x[arg] ; // dependent type
    }
    
  • un type de modèle a construit à partir d'un modèle parameter :

    T<int>, MyTemplate<T>
    

dépendance de type et dépendance de valeur

Les noms et les expressions dépendants sur un paramètre de modèle sont en tant que dépendant de type ou évaluez le dépendant, selon que le paramètre de modèle est un paramètre ou un paramètre de valeur.En outre, tous les identificateurs déclarés dans un modèle avec un dépendant du type sur l'argument template sont considérés comme dépendant de valeur, de même qu'un type intégral ou énumération initialisé avec une expression de valeur-dépendant.

les expressions (dépendant du type et de valeur-dépendant sont des expressions qui impliquent des variables qui dépendent de type ou évaluez le dépendant.Ces expressions peuvent avoir une sémantique qui sont différents, selon les paramètres utilisés pour le modèle.

Voir aussi

Autres ressources

Modèles