Quand le mot-clé "typename" est-il nécessaire ?
En C , le mot-clé "typename" est utilisé pour lever l'ambiguïté des noms imbriqués qui dépendent sur les paramètres du modèle.
Pourquoi "typename" est-il nécessaire dans l'exemple code?
L'exemple de code définit une classe C avec une structure P imbriquée. À l'intérieur de la fonction membre f(), la ligne :
typename vector<P>::iterator p = vec.begin();
nécessite l'utilisation de "typename " parce que :
est un nom imbriqué qui dépend du paramètre de modèle K de la classe C.
::iterator est un type ou un modèle.
Autres cas où "typename" est nécessaire :
"typename" est également requis dans les situations suivantes :
template<typename T> class A { public: void f(typename T::P& p); // Requires "typename" };
template<typename T> class A { public: template<typename U> void g(typename T::template F<U>& f); // Requires "typename" };
template<typename T> class A { public: template<> void g<int>(typename T::F<int>& f); // Requires "typename" };
En général, chaque fois que vous devez faire référence à un nom imbriqué dépendant, le mot-clé "typename" est nécessaire pour lever l'ambiguïté sur le type du 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!