多次元括弧をどのようにオーバーロードできますか?多次元括弧のオーバーロード
私は、n - ベクトル空間内のポイントにアクセスできるクラスがあるとします。たとえば:
int main() {
NSpaceVector nsv; // Assume initializes all to 0
nsv[2][4][7][4][0][7][6] = 2;
cout << nsv[2][4][7][4][0][7][6] << endl; //-> 2
cout << nsv[1][4][7][4][0][7][6] << endl; //-> 0
return 0;
}
私はこれをコンパイルするために取得することはできません。
class NSpaceVector {
private:
int vectorSpace[8][8][8][8][8][8][8];
public:
const NSpaceVector operator[][][][][][][](int i, int j, int k, int l, int m, int n, int p)const {return vectorSpace[i][j][k][l][m][n][p]; }
NSpaceVector operator[][][][][][][](int i, int j, int k, int l, int m, int n, int p) {return vectorSpace[i][j][k][l][m][n][p]; }
}
unsigned long & operator [](int i) {return registers[i];}
は、私は何をしたいのは、私がこの場所へのインデックスそうのようにできるように、ブラケット演算子をオーバーロードです。何か案は? Thx、Keith:^)
多次元括弧はC++でそのような演算子がないのでオーバーロードできません。代わりに、一次元ブラケットの各オーバーロードは別のプロキシを返すようなインデックス作成の第2レベルを意味するなど、一種のプロキシオブジェクトを返すために単一のブラケットをオーバーロードする必要があります。 – SergeyA
これを 'operator()'で行うより良い方法を読むためにこれを与えてください:https://isocpp.org/wiki/faq/operator-overloading#matrix-array-of-array – user4581301
あるいは、構文。 'nsv(1,2,3,4,5,6,7)'や 'nsv [{1,2,3,4,5,6,7}]'と同様です。 –