Kiedy wołam: a7 [0] [1] [100];Operator [] Przeciążanie w wielowymiarowych tablicach C++
Jestem w stanie uzyskać pierwszy indeks "0" w operatorze [], ale jako indeks I nie będę mógł uzyskać innych wartości indeksu 1 i 100 jako rekursywnie. W jaki sposób mogłem użyć operatora [] w celu uzyskania wartości indeksu rekursywnego. W tym przykładzie dla tablicy trójwymiarowej operator [] jest wywoływany tylko raz dla pierwszego wymiaru, który jest "0".
moim przykładzie Kod:
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;
}
Jaki jest problem? Jakie zachowanie widzisz? Jeśli daje błąd kompilacji, co to jest? Jakie jest zachowanie środowiska wykonawczego? Jaki jest twój kompilator i wersja? Trochę więcej informacji nie boli, wiesz! – yzt
Czy brałeś pod uwagę ... nie robisz tego? Zamiast tego użyj przeciążenia 'operator()'. Naprawdę, ludzie próbują * droga * zbyt ciężko, aby wsunąć 'operatora []' w wielowymiarowe tablice. –
Kilka uwag bocznych: [Dlaczego interfejs mojej klasy Matrix nie powinien wyglądać jak tablica tablic?] (Http://www.parashift.com/c++-faq/matrix-array-ofray-array.html) i [wciąż go nie rozumiem. Dlaczego interfejs mojej klasy Matrix nie powinien wyglądać jak tablica tablic?] (Http://www.parashift.com/c++-faq/matrix-c-style-subscript.html) –