typedef使用typename

时间:2017-11-13 13:48:54

标签: c++ templates metaprogramming typedef typename

所以我有some code我问了一个问题,我发现这个问题令人困惑,后来又被删除了:

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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