2

重複の可能性:
同様の const メンバー関数と非 const メンバー関数の間のコードの重複を削除するにはどうすればよいですか?

私の仕事は、C++ ベクトル アナログを実装することです。2 つのケースで operator[] をコーディングしました。

T myvector::operator[](size_t index) const {//case 1, for indexing const vector
    return this->a[index];   
} 
T & myvector::operator[](size_t index) {//case 2, for indexing non-const vector and assigning values to its elements
    return this->a[index];
}

ご覧のとおり、コードは完全に同等です。この例 (コードラインは 1 つだけ) では問題ありませんが、const と non-const の両方のケースに演算子またはメソッドを実装し、それぞれ const または参照値を返す必要がある場合はどうすればよいですか? コードを変更するたびに、すべてのコードをコピーして貼り付けるだけですか?

4

1 に答える 1

0

ここでの const_cast の数少ない有効な使用法の 1 つです。非 const 関数を通常どおり記述してから、次のように const 関数を記述します。

const T & myvector::operator[](size_t index) const {
    myvector<T> * non_const = const_cast<myvector<T> *>(this);
    return (*non_const)[index];
} 
于 2011-04-20T19:06:53.507 に答える