web-dev-qa-db-ja.com

ブラケット演算子[]をオーバーロードして取得および設定します

次のクラスがあります。

class risc { // singleton
    protected:
        static unsigned long registers[8];

    public:
        unsigned long operator [](int i)
        {
            return registers[i];
        }
};

ご覧のとおり、「取得」のために角括弧演算子を実装しました。
これで、設定用に実装したい、つまり:risc[1] = 2

どうすればできますか?

51
SagiLow

これを試して:

class risc { // singleton
protected:
    static unsigned long registers[8];

public:
    unsigned long operator [](int i) const    {return registers[i];}
    unsigned long & operator [](int i) {return registers[i];}
};
67
Andrew Durward

クラスのユーザーが値の設定に使用するように、_operator[]_から参照を返す必要があります。したがって、関数シグネチャはunsigned long& operator [](int i)になります。

10
Naveen