1. ホーム
  2. c++

[解決済み] 重複、constとnon-const、ゲッターのエレガントな解決策?重複

2022-05-28 09:38:36

質問

があると嫌じゃないですか?

class Foobar {
public:
    Something& getSomething(int index) {
        // big, non-trivial chunk of code...
        return something;
    }

    const Something& getSomething(int index) const {
        // big, non-trivial chunk of code...
        return something;
    }
}

このどちらのメソッドも、もう一方のメソッドで実装することはできないので、 非 const のバージョンから const バージョンから削除されます (コンパイラエラー)。 を呼び出すには、キャストが必要になります。 const バージョンから const のバージョンと同じです。

これに対する本当のエレガントな解決策はあるのでしょうか、ない場合、最も近いものは何でしょうか。

どのように解決するのですか?

Effective C++の本で、他の関数からconstをキャストアウェイして非const版を実装する方法と記憶しています。

これは特に美しいものではありませんが、安全です。これを呼び出すメンバ関数が nononst であるため、オブジェクト自体が nononst であり、const をキャストアウェイすることが許可されるのです。

class Foo
{
public:
    const int& get() const
    {
        //non-trivial work
        return foo;
    }

    int& get()
    {
        return const_cast<int&>(const_cast<const Foo*>(this)->get());
    }
};