라벨이 Operator Overloading인 게시물 표시

C++ 2D subscript overloading using typecasting.

이미지
C++에서 연산자오버로딩을 이용하면 코드의 가독성을 좋게 만들 수 있고, 좀 더 편하게 객체를 사용할 수 있게 된다. 예를 들어 Array 클래스가 있을때, Array array; .... n = array.get(10); // 1 n = array[10]; // 2 두 가지 방법중 subscript overloading을 이용한 2번 방법이 보기 편하고 직관적일 것이다. 만약 2D subscript overloading, 즉 [][] 연산자를 overloading하려면 어떻게 해야할까? 실제로 [][] 연산자는 존재하지 않고, [] 가 2번 연산된 것으로 처리된다. 따라서 이를 수행하려면 http://stackoverflow.com/questions/6969881/operator-overload 와 같이 Proxy Class를 이용해야한다. Proxy객체를 이용하면 생성하고 초기화하고 소멸하는 등에 대한 추가적인 overload가 든다. 오늘 그래서 내가 생각해낸 방식이 Imaginal Proxy Class 라는 방법이다. (이름은 내가 지었다..) Proxy Class는 사용하되 객체는 생성하지말고, type casting을 이용해 Proxy Class의 subscript operator만 사용하게끔하는 것이다. 아래가 그 예이다. 음?? 왜 이거 짤때 *reinterpret_cast<PixelArray*>~~ 이런식으로 했지?? 포인터쓸 필요없이, 그냥 레퍼런스 이용해서 reinterpret<PixelArray&>(data[idx * width]) 이런식으로 하면 됩니다 ㅋㅋㅋㅋ 위에서 PngImage가 우리가 2D subscript operator overloading을 하려는 대상이고, PixelArray가 그 것을 위한 Proxy Class이다. PngImage::data에 pixel정보들이 차례로 나열되어 있다. Image와 PixelArray의 operator[]를...