2011-01-01 9 views
7

私はコレクションクラスを作成しています。私は角括弧の演算子([])をオーバーロードして、コレクション内の要素へのアクセスを提供したいと思います。角括弧をオーバーロードして値を受け入れる演算子

int operator[](int i) 
{ 
    // Do stuff here 
} 

私の問題は、私は値を受け入れるように、この演算子を使用することができるようにこれを書くためにどのように表示されていないということです。

myClassInstance[0] = value; 

私はと角括弧演算子を宣言する方法がわかりませんでした追加の引数(要素に割り当てる値)。

私は単純にint &を返すことができ、呼び出し側はそれに値を割り当てることができますが、内部的に各要素は公開されたものとは異なる形式で格納されます。

これも可能ですか?

+0

次の2つの演算子[](int型)のバージョンが必要です。あなたが頼んだconstバージョンと非constバージョンです。元のバージョンはconstオブジェクトを呼び出すためにconstの背後にconstを持つ必要があります。 –

+0

@エドウィン:あなたの他のコメントを見ました。私はそれを行ってあげるよ。ありがとう。 –

答えて

9

暗黙的にintに変換可能で、intから割り当て可能なint_proxyクラスを記述します。このプロキシクラスで

operator int(); 
int_proxy& operator=(int); 

、店あなたが取得し、コンテナ内の値を設定できるようにする必要がありますどんな情報:あなたは、少なくとも2つのメンバ関数が必要になります。変換演算子での検索と代入演算子での代入を行います。

+1

元のint演算子[](int)はconst修飾子を持つ必要があることを忘れています。この修飾子はconstオブジェクトで呼び出すことができます。 –

+0

私はこれをもっと簡単にできると思っていました。しかし、それはそれのようには見えません。ありがとう! –

+0

@Edwin: '[]'を使って 'const'オブジェクトを読んで、同じ演算子を使って非constオブジェクトを読み書きする方法はありますか? – supercat

2

演算子=を持つオブジェクトへの参照を返します。これは、必要な場所にintを埋めることができます。必ずしも素晴らしい例ではないにしても、STLのブールベクトルトリッキーを見てください。

1

書き込み:

int& operator[](int i) 
    { 
     // Do stuff here 
    }