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];
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];
operator[]
いいえ、オーバーロードして複数の引数を取ることはできません。それ以外の
double b = some_obj[7,3];
使用する
double b = some_obj[7][3];
This answerは、後者を可能にするプロキシオブジェクトを作成する方法を説明しています。
それ以外の場合は、オーバーロードoperator()
して 2 つの引数を取ることができます。
いいえ。C++ でこれを行う慣用的な方法は次のとおりです。
double b = some_obj[7][3];
いいえ、C++ 構文では、
double b=some_obj[7,3];
コンマはコンマ演算子であり、引数を区切るコンマではありません。
結論: いいえ、ユーザーを混乱させないでください。
C++ FAQから:
演算子のオーバーロードの目的を思い出してください。それは、クラスを使用するコードのコストと欠陥率を削減することです。ユーザーを混乱させる演算子を作成した場合 (それらはクールだから、コードを高速化するため、それができることを自分自身に証明する必要があるため; 理由はどうでもいい)、すべての理由に違反したことになります。そもそも演算子のオーバーロードを使用するため。
アンドレアが提案したことを実行するか、オーバーロード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);
一時的な作成にロックされず、複数の引数が許可されるため、これを行うより良い方法はoperator()
. 詳細はC++ FAQにあります。
できませんが、この場合、オペレーターが行っていることは直感的ではないため、関数の方が優れていると思います。