typename 关键字

1、class关键字的同义词

template <typename T>
const T& max(const T& x, const T& y)
 {
   return x > y ? x : y;
 }

2、类型名指示符

告诉编译编译器把一个特殊的名字解释成一个类型。在下列情况下必须对一个name使用typename关键字:
一、一个唯一的name(可以作为类型理解),嵌套在另一个类型中
二、依赖于一个模板参数,就是说模板参数在某种程度上包含这个name,当模板参数是编译器在指认一个类型时便会产生误解

struct StructWithBarAsValue
{
     int bar;
};

template <typename T>
void foo(const T& t)
{   
     // 声明一个指向某个类型为T::bar的对象的指针
     typename T::bar * p;
 }

猜你喜欢

转载自www.cnblogs.com/smallredness/p/10940241.html