所以我有some code我问了一个问题,我发现这个问题令人困惑,后来又被删除了:
template <typename T>
struct foo {
typedef typename pair<T, T> PointType;
private:
PointType point;
};
我不确定typename
定义中PointType
的功能是什么。这个关键字刚刚省略了吗?我注意到using
定义中经常使用它来在类型支持中添加*_t
扩展名。也许那就是这里的目的?
答案 0 :(得分:1)
这是必要的,因为pair<T, T>
是dependent name,这意味着它会根据foo
的初始化方式而改变。
答案 1 :(得分:1)
您正在使用第二种类型的typename,根据cppreference:http://en.cppreference.com/w/cpp/keyword/typename
基本上,您正在给编译器提示:T是依赖于模板的类型
pair<T, T>