Frage zu seltsamer Implementation
-
Hi Freaks!
Ich habe gerade Quellcode vorliegen, den ich durchforsten muss. Dabei bin ich auf folgende Funktion gestoßen:
#define MaxDim 31 typedef BYTE FormVec[MaxDim+1]; typedef FormVec *PFormVec; class XXXX { public: ... inline float MatWert(const PFormVec fvector) {return (*this)[fvector];} ... }Die Funktion gibt ja einen Float-Wert zurück, nur werde ich nicht schlau wo genau der hergeholt wird. fverctor wird ja übergeben und this ist der Zeiger auf die akt. Klasse XXXX. Wird jetzt das Array-Element nach this gecastet? Und welches float-Element aus der dem Array gibt die Funktion überhaupt zurück?
Also um es kurz zu machen: Kann mir jemand erklären was die Funktion ganeu macht?
-
Der this-Zeiger wird in diesem Quellcode dereferenziert, du erhälst ein Objekt vom Typ <const XXXX &>. Irgendwo in der Klasse muss also
float operator[](const PFormVec) const;definiert sein, damit du so etwas schreiben kannst. Niemand kann dir sagen, was die Funktion genau macht, da der Quellcode des Operators unbekannt ist...
-
das inline kannst streichen, wenn die Funktion in der Klasse drinnen definiert wird, ist sie automatisch inline
-
haksor schrieb:
Der this-Zeiger wird in diesem Quellcode dereferenziert, du erhälst ein Objekt vom Typ <const XXXX &>. Irgendwo in der Klasse muss also
float operator[](const PFormVec) const;definiert sein, damit du so etwas schreiben kannst. Niemand kann dir sagen, was die Funktion genau macht, da der Quellcode des Operators unbekannt ist...
Aaaaaa, jetzt! Der Operator und zugehöriger Code sieht folgendermaßen aus:
inline float operator [] (const PFormVec vec) {return (*this)[Adr(vec)];} DWORD Adr(const PFormVec vec);Man bekommt also anscheinend aus dem Adr-Array den "vec"-torten Vektor zurück?!