ホームページ > バックエンド開発 > C++ > 重複する const および非 const ゲッター メソッドを適切に処理するにはどうすればよいでしょうか?

重複する const および非 const ゲッター メソッドを適切に処理するにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2024-12-04 00:39:09
オリジナル
597 人が閲覧しました

How Can We Gracefully Handle Duplicate Const and Non-Const Getter Methods?

重複ゲッター、定数ゲッター、および非定数ゲッターの適切な処理

プログラマーとして、私たちは const ゲッターと非定数ゲッターの両方を持つという問題によく遭遇します。クラス内の getter メソッドの -const バージョン。これらを個別に実装するとコードの重複が発生する可能性がありますが、この難問に対する洗練された解決策を見つけるのは困難な場合があります。

課題

提供された例では、Foobar クラスに必要なクラスが必要です。 2 つの getSomething() メソッド: 1 つは非 const (Something& getSomething(int Index)) で、もう 1 つは const (const Something& getSomething(int)インデックス) 定数)。ただし、これらのメソッドを他のメソッドとともに実装しようとすると、必然的にコンパイラ エラーが発生します。 const バージョンから非 const バージョンをキャストすることも必要悪です。

エレガントなソリューション

完全に純粋なソリューションは実現可能ではないかもしれませんが、最も一般的には推奨されるアプローチは、他の関数から const をキャストすることです。見た目にはあまり美しくありませんが、呼び出し元のメンバー関数が非 const であるため、これは安全な手法です。つまり、オブジェクト自体が非 const であり、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());
    }
};
ログイン後にコピー

この例では、get() の非 const バージョンが const バージョンから const をキャストして、オブジェクト自体を変更します。

以上が重複する const および非 const ゲッター メソッドを適切に処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート