私はクラスがあります。例えば、vector<T>
です。私は、それぞれT&
とconst T&
を返す2つのゲッターメソッドを実装したいと思います。私はそれらの両方を実装したくありません。代わりに、constバージョンのみを実装し、非constメソッドでそのコードをconst_cast
で再利用したいと思います。const-refゲッターのconst_castで参照ゲッターを実装する落とし穴
template<typename T>
class Vector {
public:
T& operator[](size_t i) {
return const_cast<T&>(
static_cast<const Vector<T>*>(this)->operator[](i));
}
const T& operator[](size_t i) const {
return data[i];
}
private:
T* data;
};
このアプローチの落とし穴はありますか?または、const_castが正当なものであることを確認する方法はありますか?
最後に、このような複製されたconst/non-constコードを扱うよくある一般的な方法は何ですか?
は、より多くの仕事と簡単に最後に二回 –
* "演算子を実装するよりも悪いメンテナンス頭痛のように私には見えますそのような複製されたconst/non-constコードを扱う良い共通の方法は何ですか? "*すでによく尋ねられているので、十分に頻繁に答えています。 –
[elegant-to-duplicate-const-and-non-const-getters]に関連する(http://stackoverflow.com/questions/856542/elegant-solution-to-duplicate-const-and-non-const) -getters) – Jarod42