所以我有一个智能迭代器模拟一个映射const_iterator,它需要在内部构建返回类型。显然,我想在我的迭代器类中存储一个pair<Key, Value>
(因为我需要修改它),但同时我希望取消引用函数提供pair<const Key, Value>
(实际上它将分别为const pair<const Key, Value>&
和const pair<const Key, Value>*
) 。我到目前为止提出的唯一解决方案是每次更改我的迭代器类指向的值更改时动态分配一对新对。不用说,这不是一个好的解决方案。是否可以将一对<Key, Value>转换成一对<const Key,Value>?
我也试过*const_cast<const pair<const Key, Value> >(&value)
其中value
被宣布为pair<Key, Value>
。
任何帮助将不胜感激(如知识,它不能做)。
编辑
对于好奇:我结束了我的迭代器类存储pair<const Key, Value> p
。为了改变对我改变分别基于底层迭代器(map<Key, Value>::const_iterator it
),荷兰国际集团const_cast
关键的两个要素,以便它可以改变,就像这样:
*const_cast<Key*>(&p.first) = it->first;
p.second = it->second;
没办法了,我非常高兴与,但它完成了工作,并且取消引用方法很开心,因为我存储了可以引用的正确类型的东西。
您有问题吗? –
很难相信你会付出如此巨大的努力来发表这篇小文章,甚至不尝试**:'std :: pair p(1,2); std :: pair q = p; //很好' –
@ Kerrek SB:我认为你忽略了Op的问题的一个重要部分。他希望避免每次调用自定义迭代器的解除引用/成员选择操作符时构造一个新的对象。这在operator->中变得尤为重要,因为这意味着他的迭代器必须潜在地存储成员对并在每次函数被调用或迭代器递增/递减时复制到成员对。 – stinky472