typename

在模板定义中,typename 向编译器提供未知标识符是类型的提示。 在模板参数列表中,它用于指定类型参数。

语法

typename identifier;

备注

如果模板定义中的名称是依赖于模板自变量的限定名称,则必须使用 typename 关键字;如果限定名称是独立的,则此名称是可选的。 有关详细信息,请参阅模板和名称解析

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()
{
}

另请参阅

模板
关键字