Maison > développement back-end > C++ > Quand le mot-clé « typename » est-il requis dans les modèles C ?

Quand le mot-clé « typename » est-il requis dans les modèles C ?

Barbara Streisand
Libérer: 2024-12-21 01:03:10
original
624 Les gens l'ont consulté

When is the

Quand le mot-clé « typename » est-il requis ? [duplicata]

Considérez le code suivant :

template<class K>
class C {
    struct P {};
    vector<P> vec;
    void f();
};

template<class K>
void C<K>::f() {
    typename vector<P>::iterator p = vec.begin();
}
Copier après la connexion

Pourquoi le mot-clé "typename" est-il nécessaire dans cet exemple ?

Réponse :

Le mot-clé "typename" est nécessaire chaque fois que vous faites référence à un nom imbriqué dans une classe ou une fonction de modèle où le type du nom imbriqué n'est pas connu au moment de la compilation. C'est ce qu'on appelle un « nom dépendant ».

En C , il existe trois catégories d'entités : les valeurs, les types et les modèles. Chacun d’entre eux peut avoir un nom, mais le nom lui-même n’indique pas à quelle catégorie appartient l’entité. Par conséquent, le compilateur doit déduire la catégorie d'entité à partir du contexte.

Lorsque le compilateur ne peut pas déduire la catégorie, vous devez la spécifier explicitement à l'aide du mot-clé approprié :

  • " typename": spécifie un type dans un modèle
  • "template": spécifie un modèle dans un template
  • "value" : spécifie une valeur dans un modèle (non explicitement affichée dans l'exemple)

Dans le code fourni, le nom imbriqué "vector< ;P>" est un type dans une classe de modèle. Toutefois, le compilateur ne peut pas en déduire car le paramètre de type « K » est inconnu au moment de la compilation. Par conséquent, le mot-clé « typename » est requis pour spécifier explicitement que « vector

» est un type.

D'autres cas où "typename" doit être spécifié incluent :

  • Lors de la déclaration d'un alias de modèle dans une classe
  • Lors de la définition d'un constructeur ou d'un destructeur pour un type imbriqué
  • Lors de l'accès à une fonction membre d'un type imbriqué
  • Lors de l'utilisation d'un type comme argument de modèle

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal