Comment déclarer:Comment déclarer le type de retour en tant que classe interne du type typename?
template<typename T>
(T::ABC)& get();
il donne l'erreur:
error: expected constructor, destructor, or type conversion before ‘&’ token
Comment déclarer:Comment déclarer le type de retour en tant que classe interne du type typename?
template<typename T>
(T::ABC)& get();
il donne l'erreur:
error: expected constructor, destructor, or type conversion before ‘&’ token
La position correcte est sans parenthèses
typename T::ABC
parce que la forme avec des parenthèses
(typename T::ABC)
est un opérateur de cast et non un type!
De plus, le mot-clé typename
est nécessaire parce que T:ABC
est un « type à charge »: si vous n'utilisez pas typename
, l'expression T:ABC
est interprété comme si ABC était membre de la classe T, et non pas un type imbriqué) .
Utilisez le mot-clé typename
:
template<typename T>
typename T::ABC& get();
Il doit être:
template<typename T>
typename T::ABC& get();
mais je t ried, qui ne fonctionne pas:
template<typename T>
(typename T::ABC)& get();
Oui, je l'ai essayé aussi et je m'en suis rendu compte. Je ne sais pas pourquoi ça ne marche pas avec les parenthèses! – James