我有一个代码形式:
unordered_set<pair<int,int>,CustomHash> Edges;
typedef unordered_set<pair<int,int>,CustomHash>::iterator EdgesIt;
...
for(auto it=Edges.begin();it!=Edges.end();it++){
list<EdgesIt> List;
}
等。如何避免定义要在List声明中使用的新类型EdgesIt并以更智能的方式获取它,例如:
list<Edges::iterator_type> List;
InteliSense仅建议Edges::iterator
,其定义为typedef std::iterator pair<int,int> iterator
。更多的说,它不起作用。我也尝试使用unordered_set::iterator
,但它也没有用。
答案 0 :(得分:7)
Edges
是对象的名称,而不是类的名称(和名称空间等)。您无法直接从Edges::iterator
获取嵌套的typedef。
您可以使用decltype(自C ++ 11开始)获取所需类型(即unordered_set<pair<int,int>,CustomHash>
)。 e.g。
list<decltype(Edges)::iterator> List; // same as list<unordered_set<pair<int,int>,CustomHash>::iterator> List;