Rechts- bzw. Linksseitigkeit bei Operatorenüberladung
-
Heho, wollte kurz fragen, ob es möglich ist durch hinzufügen eines Schlüsselwortes o.ä. dem Compiler mitzuteilen, dass überladener Operator kommutativ sein soll? Etwa wenn ich die skalare Multiplikation eines Vektors mit einem Skalar überlade, so dass ich diese nicht zweimal praktisch identisch implementieren muss.
Habe jetzt nämlich z.B. das hier:
friend Vek3 operator*(double Zahl,Vek3& vektor); friend Vek3 operator*(Vek3& vektor,double Zahl);Macht natürlich zweimal genau das selbe.
-
Nein. Du kannst dir aber die Schreibarbeit erleichtern:
friend Vek3 operator*(double Zahl,Vek3& vektor) { return Vek3(vektor.x * Zahl, vektor.y * Zahl, vektor.z * Zahl); } friend Vek3 operator*(Vek3& vektor,double Zahl) { return Zahl * vektor; }
-
Lass dir die verschiedenen Formen von operator* doch "generieren":
#include <boost/operators.hpp> class Vec3 : boost::multiplicable<Vec3, double> //! { /* ... */ public: Vec3& operator *= (double faktor) //!! { x*= faktor; y *= faktor; z *= faktor; return *this; } };boost::multiplicable<Vec3,double> "induziert" quasi die beiden operatoren für double und Vec3, die dann jeweils den gezeigten operator*= benutzen.
Mehr dazu im Magazin
