typename

时间:2021-12-29 09:51:40

typename关键字是C++在标准化过程中被引入的,目的在于向编译器说明template内的某个标识符是个类型。

如:template <typename T>

class MyClass

{

typename T::SubType *ptr;

...

}

在这里,第二个typename关键字的意思是:SubType是class T内部定义的一个类型,从而ptr是一个指向T::SubType类型的指针

如果没有关键字typename,SubType会被认为是class T的一个static成员,于是被编译器理解为一个变量,从而

T::SubType *ptr;所表达的意思是:class T的static成员SubType和ptr相乘。

2、通常如果某个与模板参数相关的名称是个类型时,你就必须加上关键字typename。

3..template构建

在如下例子中:

template<int N>

void printBitset(std::bitset<N> const &bs)

{

std::cout<<bs.template to_string< char ,char_traits<char>, allocator<char> >();

}

如果没有.template,则编译器会无法得知to_string后的'<'是模板参数的开始符号,错误的人为是一个小于符号。

.template或者->template只有在template内才能被使用。