Khi tôi gọi: a7 [0] [1] [100];Toán tử [] Quá tải trong mảng đa chiều C++
Tôi có thể lấy chỉ mục đầu tiên '0' trong toán tử [] nhưng dưới dạng chỉ mục tôi sẽ không thể lấy các giá trị chỉ mục 1 và 100 khác theo cách đệ quy. Làm thế nào tôi có thể sử dụng toán tử [] để thu được các giá trị chỉ mục folowing đệ quy. Trong ví dụ này cho mảng 3 chiều, toán tử [] chỉ được gọi một lần cho thứ nguyên đầu tiên là '0'.
My Mã số Ví dụ:
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;
}
Vậy vấn đề là gì? Bạn đang thấy hành vi gì? Nếu nó đưa ra một lỗi biên dịch, nó là gì? Hành vi thời gian chạy là gì? Trình biên dịch và phiên bản của bạn là gì? Một ít thông tin không đau, bạn biết đấy! – yzt
Bạn đã xem xét ... không làm điều này? Chỉ cần sử dụng một 'operator()' overload thay thế. Thực sự, mọi người cố gắng * cách * quá khó để shoehorn 'operator []' thành các mảng đa chiều. –
Một vài lưu ý phụ: [Tại sao giao diện lớp Matrix của tôi không giống mảng mảng?] (Http://www.parashift.com/c++-faq/matrix-array-of-array.html) và [Tôi vẫn không hiểu. Tại sao giao diện của lớp Matrix của tôi trông không giống mảng mảng?] (Http://www.parashift.com/c++-faq/matrix-c-style-subscript.html) –