С++ - значение оператора, объединяющего typedef и typename

В заголовочном файле С++ я вижу этот код:

typedef typename _Mybase::value_type value_type;

Теперь, как я понимаю, цитата из "С++ Complete Reference" Шильдта. typename может быть заменен классом ключевых слов, второе использование typename заключается в том, чтобы сообщить компилятору, что имя, используемое в объявлении шаблона, является именем типа, а не именем объекта.

Аналогично, вы можете определить новые имена типов данных, используя ключевое слово typedef. Ты не фактически создавая новый тип данных, а скорее определяя новое имя для существующего тип.

Однако, можете ли вы точно объяснить, что означает приведенная выше строка кода, где typedef и typename объединены вместе. А что означает "::" в заявлении?

Ответ 1

typedef определяет новый тип для использования в вашем коде, например сокращенное.

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

typename здесь позволяет компилятору знать, что value_type - это тип, а не объект внутри _MyBase.

:: - это область действия типа. Это похоже на "находится в", поэтому value_type "находится в" _MyBase. или может также рассматриваться как содержащий.

Ответ 2

typename говорит, что _Mybase::value_type - это имя типа, поэтому typedef может повторить этот факт.