Maison >développement back-end >C++ >Quand le mot-clé « typename » est-il nécessaire dans les modèles C ?
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 :
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!