4

operator[]複数の引数を取るオーバーロードを定義することは可能ですか? つまり、operator[]次のように定義できます。

  //In some class
  double operator[](const int a, const int b){
     return big_array[a+offset*b];}

後でこのように使用しますか?

double b=some_obj[7,3];
4

7 に答える 7

7

operator[]いいえ、オーバーロードして複数の引数を取ることはできません。それ以外の

double b = some_obj[7,3];

使用する

double b = some_obj[7][3];

This answerは、後者を可能にするプロキシオブジェクトを作成する方法を説明しています。

それ以外の場合は、オーバーロードoperator()して 2 つの引数を取ることができます。

于 2011-08-11T21:01:24.560 に答える
6

いいえ。C++ でこれを行う慣用的な方法は次のとおりです。

double b = some_obj[7][3];
于 2011-08-11T20:57:56.830 に答える
3

いいえ、C++ 構文では、

double b=some_obj[7,3];

コンマはコンマ演算子であり、引数を区切るコンマではありません。

于 2011-08-11T21:01:04.650 に答える
2

結論: いいえ、ユーザーを混乱させないでください。

C++ FAQから:

演算子のオーバーロードの目的を思い出してください。それは、クラスを使用するコードのコストと欠陥率を削減することです。ユーザーを混乱させる演算子を作成した場合 (それらはクールだから、コードを高速化するため、それができることを自分自身に証明する必要があるため; 理由はどうでもいい)、すべての理由に違反したことになります。そもそも演算子のオーバーロードを使用するため。

于 2011-08-11T21:01:29.380 に答える
2

アンドレアが提案したことを実行するか、オーバーロードoperator()して 2 つの引数を取ることができます。

// In some class
double operator()(const int a, const int b) {
    return big_array[a + offset * b];
}

// Then use it like this:
double b = some_obj(7, 3);
于 2011-08-11T21:01:49.403 に答える
1

一時的な作成にロックされず、複数の引数が許可されるため、これを行うより良い方法はoperator(). 詳細はC++ FAQにあります。

于 2011-08-11T21:01:17.827 に答える
1

できませんが、この場合、オペレーターが行っていることは直感的ではないため、関数の方が優れていると思います。

于 2011-08-11T21:01:30.300 に答える