web-dev-qa-db-fra.com

C ++ - signification d'une instruction combinant typedef et typename

Dans un fichier d'en-tête C++, je vois ce code:

typedef typename _Mybase::value_type value_type;

Maintenant, si je comprends bien, en citant "C++ la référence complète" par Schildt. typename peut être remplacé par une classe de mots clés, la deuxième utilisation de typename est d'informer le compilateur qu'un nom utilisé dans une déclaration de modèle est un nom de type plutôt qu'un nom d'objet.

De même, vous pouvez définir de nouveaux noms de types de données à l'aide du mot clé typedef. Vous ne créez pas réellement un nouveau type de données, mais définissez plutôt un nouveau nom pour un type existant.

Cependant, pouvez-vous expliquer exactement quelle est la signification de la ligne de code ci-dessus, où typedef et typename sont combinés ensemble. Et qu'est-ce que le ":: "dans la déclaration implique?

52
Arvind

typedef définit un nouveau type à utiliser dans votre code, comme un raccourci.

typedef typename _MyBase::value_type value_type;
value_type v;
//use v

le nom de type indique au compilateur que value_type est un type et non un objet à l'intérieur de _MyBase.

le :: est la portée du type. C'est un peu comme "est dedans" donc value_type "est dans" _MyBase. ou peut également être considéré comme contenant.

54
pippin1289

typename dit que _Mybase::value_type est le nom du type afin que le typedef puisse s'appuyer sur ce fait.

3
Paul Evans