Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 |
class c_Vector2 { public: float x; float y; operator D3DXVECTOR2& (){returnD3DXVECTOR2(x,y);} operator const D3DXVECTOR2& ()const{return D3DXVECTOR2(x,y);} }; inline float Vector2Length(const c_Vector2 &v){return D3DXVec2Length(&v);} |
C-/C++-Quelltext |
|
1 2 3 4 |
operator D3DXVECTOR2 () const { return D3DXVECTOR2(x,y); } |
C-/C++-Quelltext |
|
1 |
inline float length(const c_Vector2& v) { return std::sqrt(v.x * v.x + v.y * v.y); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 |
class c_Vector2 { public: float x; float y; float length() const { return sqrt(x*x + y*y); } }; |
C-/C++-Quelltext |
|
1 2 |
operator const D3DXVECTOR2* () const { &x;} operator D3DXVECTOR2* () { &x;} |
Hm? Selbst mit return würde das nicht so funktionieren, wie du dir das vorstellst. Man müsste entweder mit new ein neues Objekt erzeugen, was hier sehr leicht zu Leaks führen kann, oder Zeiger auf verschiedene Typen reinterpret-casten, was auch nicht ungefährlich ist.Zitat von »"dot"«
Natürlich gibt es auch noch den Hack:
C-/C++-Quelltext
1 2 operator const D3DXVECTOR2* () const { &x;} operator D3DXVECTOR2* () { &x;}
Zitat von »"Nexus"«
Hm? Selbst mit return würde das nicht so funktionieren, wie du dir das vorstellst. Man müsste entweder mit new ein neues Objekt erzeugen, was hier sehr leicht zu Leaks führen kann, oder Zeiger auf verschiedene Typen reinterpret-casten, was auch nicht ungefährlich ist.
C-/C++-Quelltext |
|
1 2 |
operator const D3DXVECTOR2* () const { reinterpret_cast<D3DXVECTOR2*>(&x);} operator D3DXVECTOR2* () { reinterpret_cast<D3DXVECTOR2*>(&x);} |
Zitat von »"dot"«
Natürlich is das unschön, aber er verwendet Direct3D, das ganze soll also sowieso nur auf Windows laufen und da funzt das im Allgemeinen.
Nicht umsonst hab ichs auch als Hack bezeichnet
Zitat von »"jan91"«
Ich werd jetzt D3DXVECTOR2 Typ verwenden
Zitat von »"Nexus"«
Du hast übrigens dein return schon wieder vergessen.
Zitat von »"Nexus"«
Dass für die Länge eines Vektors ein Zeiger verlangt wird, verwundert mich trotzdem. Ist das wegen C-Kompatibilität?
Werbeanzeige