Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以访问typedef';通过一个实例编辑类型?_C++_Types - Fatal编程技术网

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)