[英]C++ const correctness with std::pair
我維護一個容器類,其接口類似於std::map
/ std::unordered_map
。
接口聲稱存儲std::pair<const X,Y>
(即value_type
是什么)。 但是,在內部,實現存儲了std::pair<X,Y>
的排序數組。
當前實現使用reinterpret_cast
來實現迭代器。 我的問題是,有更好的選擇嗎?
轉向存儲std::pair<const X,Y>
數組是不可能的,因為實現需要復制數組中的元素以實現插入和刪除。 其中一種方法是使用std::sort
。
編輯:雖然我相信reinterpret_cast
調用未定義的行為(或實現定義?)我還沒有遇到一個編譯器,這不起作用 - 我不擔心什么?
迭代器的解引用的當前實現:
template <class K, class M>
std::pair<const K,M>& operator*() {
std::pair<K,M>& result = ...;
return *reinterpret_cast<std::pair<const K,M>*)(&result);
}
我相信你不能通過返回一個std::pair
來解決這個問題。 相反,您將不得不返回看起來像標准對的代理對象,但如果更新second
成員,它會傳播到主容器,而第一個成員則根據需要公開為const
。
“更好的選擇?” reinterpret_cast
什么問題? 在這種情況下,由於您在具有兼容(實際上是相同)表示的對象之間進行轉換,因此轉換甚至是明確定義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.