C++ 我们可以访问typedef';通过一个实例编辑类型?
我想知道C++ 我们可以访问typedef';通过一个实例编辑类型?,c++,types,C++,Types,我想知道 for(std::map<int, double, std::greater<int> >::iterator it = mymap.begin(); it != mymap.end(); ++it) { //do stuff } 当然,对映射进行typedefing会使第一个代码不那么冗长——但这不是我的观点。编译器知道mymap的类型,所以为什么不让它解析mymap::iterator?是否存在无法通过实例访问迭代器的原因?:是一个作用域解析运算符,
for(std::map<int, double, std::greater<int> >::iterator it = mymap.begin(); it != mymap.end(); ++it)
{
//do stuff
}
当然,对映射进行typedefing会使第一个代码不那么冗长——但这不是我的观点。编译器知道
mymap
的类型,所以为什么不让它解析mymap::iterator
?是否存在无法通过实例访问迭代器的原因?:
是一个作用域解析运算符,需要在左侧显示类型名或命名空间名。它不接受左侧的对象名称。允许这样做可能会使语言中的许多事情过于复杂
事实上,如果想允许这样的操作,可能会将此功能附加到
操作符,因为
操作符是用于LHS上对象的操作符
for (mymap.iterator it = mymap.begin(); it != mymap.end(); ++it)
但无论如何,这仍然会使事情变得不必要的过于复杂
< >在C++标准中,类似的东西将通过<代码> DeCytys/Cord>关键字< /P>成为可能。
for (decltype(mymap)::iterator it = mymap.begin(); it != mymap.end(); ++it)
另外,根据维基百科关于decltype的文章,它在合格ID中的可用性是一个有争议的问题。如果我理解正确的话,这种用法最终被投票通过
< P.P.S.A.,正如Asha在评论中提到的那样,在将来的C++中,你将能够避免命名为“”类型。
for (auto it = mymap.begin(); it != mymap.end(); ++it)
该迭代器是在map范围内定义的类型,而不是从map创建的对象的一部分。那么,有没有其他方法通过
mymap
访问类型迭代器
?@AndreyT,mymap::iterator在mymap被类型定义为std::map时有效。@0xC0DEFACE:我特别指的是OP的mymap
。OP的<代码> MYMAP是一个对象,而不是TyPulf名称。@安德烈:不是过于复杂的东西违背了C++哲学。@ Asha:是的,它更好。只不过,decltype
确实执行了OP请求的操作:允许通过对象访问嵌套类型。什么是<代码> Auth[/COD> >并不是“OP”所要求的,但它确实是一个更好的方法。<代码>自动< /COD>关键字将被引入新的C++标准中,这将很好地解决。但是如果语言被另外定义,它可能是很好的。不能询问“成员类型”的唯一原因是没有办法!
for (auto it = mymap.begin(); it != mymap.end(); ++it)