我正在維護一個類似於std::map
/std::unordered_map
的接口的容器類。C++ const正確性與std :: pair
接口聲稱要存儲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);
}
我還沒有嘗試過,但不會const_cast比reinterpret_cast更可取? – Benj 2012-01-05 17:44:15
@Benj'const_cast'不能在這裏完成這項工作。 – 2012-01-05 17:46:19
爲什麼你不能有內部常量?也許你可以改變分配到銷燬/重建? – 2012-01-05 17:48:49