ArrayType NDArray[x][y][z]...[w] 인 다차원 배열.
함수의 파라미터로 전달하려면?
방법 1 - const size array parameter
상수크기배열이라면 이 방법이 제일 좋다.
void func(ArrayType NDArr[x][y][z]...[w]){
//여기서 x~...w는 상수 (const 또는 define된..) 이어야한다.
//그리고
NDArr[1][2][3]...[4] = VALUE;
//로 쉽게 접근가능하다.
}
하지만 이 방법은 다차원 배열의 크기가 고정적이어야만 하다.
방법 2 - C style
배열의 포인터연산을 이용해서 원하는 위치로 다이렉트 접근한다.
void func(ArrayType* NDPtr, int x, int y, int z, ..., int w){
//NDArray[1][2][3]..[4]에 접근하려면,
*(NDPtr + (1*(y*z*...*w)) + (2*(z*...*w)) + (3*(...*w)) + ... + 4) = VALUE;
//무진장 복잡하고 관리하기 힘들다.
}
방법 3 - C++ template
template<int SizeX, int SizeY, int SizeZ, ..., int SizeW>
void func(ArrayType NPArr[SizeX][SizeY][SizeZ]...[SizeW]){
//템플릿을 통해서 컴파일타임에 바인딩되게 할 수 있다.
//단지 func(NDArray)와 같이 호출하면 되고, 컴파일시 알아서 해당사이즈의 함수를 생성한다.
//접근도 쉽다.
NPArr[1][2][3]...[4] = VALUE;
}
마지막 방법이 위 세가지 방법 중 가장 유들유들한 방법이다.
하지만 템플릿은 컴파일타임 바인딩이기 때문에 동적 배열에 대한 처리는 불가능하다.
그래서 동적인 배열에 대한 처리만 따로 오버로딩 시켜주면 된다.
void func(ArrayType ***..* NPPtr, int x, int y, int z, ..., int w){
//여기서 NPPtr은 동적으로 생성된 다차원배열이다.
//이유는 모르겠지만 ㄷㄷ...
//동적인 배열에 대한 포인터는 [] 연산자를 사용할 수 있다. 고로,
NPPtr[1][2][3]...[4] = VALUE;
//로 접근가능
}
'Coding Note' 카테고리의 다른 글
[winAPI] win32 i/o cancellation (0) | 2012.08.07 |
---|---|
[MFC] MDI tab에 다른 기능의 자식 추가 (0) | 2012.07.15 |
[C++] C++ callback and delegate (0) | 2012.05.27 |
[Data Structure] Red Black Tree (0) | 2012.05.27 |
[Lua] table (0) | 2012.03.19 |