operator überladen
-
Hi ich hab ne klasse die ungefähr so aussieht:
class Surface { public: Surface(int width, int height); ~Surface(); Color &operator[] (int index) { return pixels[index]; } Color &getPixel(int x, int y) { return pixels[/*pos*/]; } private: Color *pixels; };Da ich den speicher zusammenhängend haben will möchte ich nur ein ein-dimensionales array benutzen, würde aber trozdem gerne über [][] (anstadt getPixel) drauf zugreifen können, gibts da eine möglichkeit?
Gruss
-
Dazu brauchst du eine zweite Helfer Klasse:
class HelpColor { public: HelpColor(int _index, Color *_pixels) : index(_index), pixels(_pixels) { } Color &operator[] (int y) { return pixels[index*y]; } private: int index; Color *pixels; }; class Surface { public: Surface(int width, int height); ~Surface(); HelpColor operator[] (int index) { return HelpColor(index,pixels); } Color &getPixel(int x, int y) { return pixels[x*y]; } private: Color *pixels; };Ungetestet
//EDIT
Irgendwas stimmt wohl mit den Code Tags nicht wenn man mit dem Operator [] hantiert?
-
Storm.Xapek.de schrieb:
Dazu brauchst du eine zweite Helfer Klasse:
Im Allgemeinen benötigen wir ein Proxy-Objekt. In unserem speziellen Fall genügt auch ein einfacher Zeiger:
class Surface { public: ... Color* operator[](int x) { return pixels+x*dim_y; } Color& getPixel(int x, int y) { return pixels[x*dim_y+y]; } private: Color* pixels; int dim_x; int dim_y; };
-
Super, thx!