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

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

Patricia Arquette
Patricia Arquetteoriginal
2024-12-26 12:52:09274parcourir

When is the

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

En programmation, il est courant d'utiliser des noms imbriqués, où le nom d'une entité ( par exemple, une classe) est inclus dans le nom d'une autre entité (par exemple, une fonction membre). Bien que cette imbrication soit généralement suffisante pour distinguer quelle entité est référencée, il existe des cas où le compilateur nécessite une spécification explicite.

Explication du mot clé "typename"

Le "typename" " Le mot-clé est utilisé pour déclarer explicitement qu'un nom imbriqué fait référence à un type. Cela est nécessaire lorsque le compilateur ne peut pas déduire le type d'un nom imbriqué à partir du contexte. Un tel nom imbriqué est appelé « nom dépendant ».

Un nom imbriqué devient dépendant lorsqu'il est utilisé dans une instance de modèle avec un paramètre inconnu. Dans cette situation, le compilateur ne dispose pas de suffisamment d'informations pour déterminer le type spécifique du nom imbriqué jusqu'à ce que les paramètres du modèle soient connus.

Exemple

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();
}

Dans cet exemple, le mot-clé "typename" est nécessaire car le nom imbriqué "iterator" dépend du paramètre de modèle "K". Sans le mot-clé "typename", le compilateur ne saurait pas que "iterator" fait référence au type "vector

::iterator."

Autres cas nécessitant "typename"

En plus de l'exemple ci-dessus, d'autres cas où « typename » est requis incluent :

  • Lorsque vous faites référence à un type imbriqué dans une classe de modèle
  • Lors de l'utilisation d'un nom qualifié pour accéder à un type
  • Lors de la déclaration d'un paramètre de modèle de modèle
  • Lors de la spécialisation d'un modèle pour un type spécifique

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!

Déclaration:
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