typename

Сообщает компилятору, что неизвестный идентификатор представляет собой тип.

typename identifier;

Заметки

Используйте это ключевое слово только в определениях шаблонов.

Это ключевое слово является обязательным, если имя полное и зависит от аргумента шаблона; если полное имя независимо, данное ключевое слово необязательно. Дополнительные сведения см. в разделе Шаблоны и разрешение имен.

Ключевое слово typename может использоваться любым типом в любом месте объявления или определения шаблона. В списке базовых классов оно не допускается, если не применяется в качестве аргумента шаблона для базового класса шаблона.

template <class T>
class C1 : typename T::InnerType // Error - typename not allowed.
{};
template <class T>
class C2 : A<typename T::InnerType>  // typename OK.
{};

Ключевое слово typename также можно использовать вместо ключевого слова class в списках параметров шаблона. Например, указанные ниже операторы идентичны.

template<class T1, class T2>...
template<typename T1, typename T2>...

Пример

// typename.cpp
template<class T> class X
{
   typename T::Y m_y;   // treat Y as a type
};

int main()
{
}

См. также

Ссылки

Ключевые слова в C++

Другие ресурсы

Шаблоны