typedef typename 的作用

例如下面的代码:

typedef typename std::vector<T>::size_type size_type;

查看 vector 源码可以看到:

template <class T,class Alloc=alloc>
class vector{
public:
    //...
    typedef size_t size_type;
    //...
};

vector::size_typevector 的嵌套类型定义,其实际等价于 size_t 类型。
但是,模板类型在实例化之前,编译器并不知道 vector<T>::size_type 为何物,事实上一共有三种可能:

  • 静态数据成员
  • 静态成员函数
  • 嵌套类型
    使用 typename 可以明确其后面是一个类型。
原文地址:https://www.cnblogs.com/xiaojianliu/p/13463529.html