typedef 使用类型名

typedef Using a typename

所以我some code问了一个问题,我意识到这个问题很混乱,后来被删掉了:

template <typename T>
struct foo {
    typedef typename pair<T, T> PointType;
private:
    PointType point;
};

我不确定PointType定义中typename的功能是什么。是这个关键字被省略了吗?我注意到它经常在 using 定义中用于在类型支持中添加 *_t 扩展。也许这就是这里的意图?

这是必要的,因为 pair<T, T> 是一个 dependent name,这意味着它会根据 foo 的初始化方式而改变。

根据 cppreference,您正在使用第二种类型的类型名称:http://en.cppreference.com/w/cpp/keyword/typename

基本上,你是在给编译器一个提示:T 是一个依赖于模板的类型 pair<T, T>