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
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (04.04.2017, 21:25)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Würde es nicht aber reichen nur die Interfaces, sprich "Entity" und "Unit" virtual zu deklarieren? Wenn ich das richtig verstehe, würde das ja auch das Diamond aufbrechen. Wenn ich das so richtig sehe, wird der Constructor ja nicht direkt aufgerufen, aber das wäre mir bei den Interfaces ja recht herzlich egal, da die keine Custom Constructor besitzen.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// interface.h #ifndef INCLUDED_INTERFACE #define INCLUDED_INTERFACE #pragma once #ifdef _MSC_VER #define INTERFACE __declspec(novtable) #else #define INTERFACE #endif #endif // INCLUDED_INTERFACE |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// Navigator.h #ifndef INCLUDED_NAVIGATOR #define INCLUDED_NAVIGATOR #pragma once #include <interface.h> class INTERFACE Navigator { protected: Navigator() = default; Navigator(const Navigator&) = default; Navigator& operator =(const Navigator&) = default; ~Navigator() = default; public: virtual void reset() = 0; virtual void writeWorldToLocalTransform(math::affine_float4x4* M) const = 0; virtual void writeLocalToWorldTransform(math::affine_float4x4* M) const = 0; virtual void writePosition(math::float3* p) const = 0; virtual void buttonDown(GL::platform::Button button, int x, int y) = 0; virtual void buttonUp(GL::platform::Button button, int x, int y) = 0; virtual void mouseMove(int x, int y) = 0; virtual void mouseWheel(int delta) = 0; }; #endif // INCLUDED_NAVIGATOR |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// OrbitalNavigator.h #ifndef INCLUDED_ORBITAL_NAVIGATOR #define INCLUDED_ORBITAL_NAVIGATOR #pragma once #include "Navigator.h" class OrbitalNavigator : public Navigator { // ... }; #endif // INCLUDED_ORBITAL_NAVIGATOR |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (05.04.2017, 10:12)
Warum benutzt du einerseits include guards und anderer seits auch noch pragma once? Ist das nicht ein bisschen redundant? Bzw. würden include guards nicht vollkommen ausreichen?
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (08.04.2017, 00:33)
Also unterstützt #pragma once prinzipiell den PCH?
Werbeanzeige