Wenn ich rufe: a7 [0] [1] [100];Operator [] Überladen in mehrdimensionalen Arrays C++
Ich bin in der Lage, den ersten Index '0' im Operator [] zu erhalten, aber als Index kann ich nicht andere Indexwerte 1 und 100 rekursiv erhalten. Wie könnte ich den Operator [] verwenden, um rekursive folgende Indexwerte zu erhalten. In diesem Beispiel für das 3-dimensionale Array wird operator [] nur einmal für die erste Dimension aufgerufen, die "0" ist.
Mein Beispielcode:
template <class T, unsigned ... RestD> struct array;
template <class T, unsigned PrimaryD>
struct array <T, PrimaryD> {
typedef T type[PrimaryD];
type data;
T& operator[] (unsigned i) {
return data[i];
}
};
template <class T, unsigned PrimaryD, unsigned ... RestD>
struct array <T, PrimaryD, RestD...> {
typedef typename array<T, RestD...>::type OneDimensionDownArrayT;
typedef OneDimensionDownArrayT type[PrimaryD];
type data;
OneDimensionDownArrayT& operator[] (int i) {
OneDimensionDownArrayT& a = data[i];
return a;
}
};
int main() {
array<int, 1, 2, 3> a7 {{{{1, 2, 3},{4, 5, 6}}}};
a7[0][1][2] = 100; //=>won't recursively go through operator[]
//I want to recursively obtain 0, 1 and 2 as index values
a7[0][1][100] = 100; //also works correctly.
std::cout << a7[0][1][100] << std::endl;
return 0;
}
Also, was ist das Problem? Welches Verhalten siehst du? Wenn es einen Kompilierungsfehler gibt, was ist es? Was ist das Laufzeitverhalten? Was ist dein Compiler und deine Version? Ein bisschen mehr Information tut nicht weh, weißt du! – yzt
Haben Sie überlegt, ob Sie das nicht tun? Verwenden Sie stattdessen einfach eine 'operator()' Überladung. Wirklich, Leute versuchen * way * zu schwer, 'operator []' in mehrdimensionale Arrays zu beschatten. –
Ein paar Randnotizen: [Warum sollte die Schnittstelle meiner Matrix-Klasse nicht wie ein Array-Array aussehen?] (Http://www.parashift.com/c++faq/matrix-array-of-array).html) und [ich verstehe es immer noch nicht. Warum sollte die Benutzeroberfläche meiner Matrix-Klasse nicht wie ein Array-Array aussehen? (Http://www.parashift.com/c++faq/matrix-c-style-subscripts.html) –