С++ - значение оператора, объединяющего 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
может повторить этот факт.