所以我有一個智能迭代器模擬一個映射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