私はstd::map
/std::unordered_map
のようなインタフェースを持つコンテナクラスを維持しています。std :: pairでのC++のconst正当性
インターフェイスがstd::pair<const X,Y>
(つまり、value_type
のもの)を格納すると主張しています。しかし、内部的には、実装はstd::pair<X,Y>
のソートされた配列を格納します。
現在の実装では、reinterpret_cast
を使用してイテレータを実装しています。私の質問は、より良い選択肢はありますか?
std::pair<const X,Y>
の配列の格納に移動することはできません。実装では、挿入および削除を実装するために配列内の要素をコピーする必要があるためです。これを行う方法の1つはstd::sort
を使用しています。
編集:私はreinterpret_cast
は未定義の動作起動すると信じていますが、私はこれが動作しないコンパイラに遭遇することは至っていない - 私は何も気にせAM(または実装が定義されましたか?)?イテレータの間接参照の
現在の実装:
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
@Benj 'const_cast'はここで仕事をすることができません。 –
内部constを使用できないのはなぜですか?おそらく、割当を破壊/再建に変更することはできますか? –