호출 할 때 : a7 [0] [1] [100];연산자 [] 다차원 배열에서 오버로드 C++
연산자 []에서 첫 번째 인덱스 '0'을 얻을 수 있지만 인덱스로서 재귀 적으로 다른 인덱스 값 1과 100을 얻을 수 없습니다. 재귀적인 folowing 인덱스 값을 얻기 위해 어떻게 operator []를 사용할 수 있습니까? 이 3 차원 배열의 예제에서 operator []는 첫 번째 차원 인 '0'에 대해서만 한 번만 호출됩니다.
내 예제 코드 :
는typedef array<T, RestD...> OneDimensionDownArrayT;
에 선
typedef typename array<T, RestD...>::type OneDimensionDownArrayT;
을 변경 이유 때문에 array<int, 1, 2, 3>::type
동등한 여기에서 오류가 실제로 조금 미묘한입니다
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;
}
그래서 무엇이 문제입니까? 어떤 행동을보고 있습니까? 컴파일 오류가 발생하면 어떻게해야합니까? 런타임 동작이란 무엇입니까? 귀하의 컴파일러와 버전은 무엇입니까? 조금 더 많은 정보가 상처를주지는 않습니다. – yzt
당신은 이것을 고려하지 않았습니까? 대신'operator()'오버로드를 사용하십시오. 실제로, 사람들은 다차원 배열로 '연산자'를 구부리기에는 너무 어렵습니다. –
몇 가지 사이드 노트 : [내 Matrix 클래스의 인터페이스가 배열 배열처럼 보이지 않아야하는 이유는 무엇입니까?] (http://www.parashift.com/c++-faq/matrix-array-of-array.html) 그리고 [나는 아직도 그것을 얻지 못한다. Matrix 클래스의 인터페이스가 배열 배열처럼 보이지 않아야하는 이유는 무엇입니까?] (http://www.parashift.com/c++-faq/matrix-c-style-subscript.html) –