Objektinstanzerzeugung nur in bestimmten Funktionen erlauben?
-
Gibts dafür einen besseren Weg als den Konstruktor private zu machen und die Klasse in der als einzige derartige Objekte erstellt werden dürfen als friend zu deklarieren?
Grund: Ich enumeriere verschiedene DirectX-Formate eines Grafikadapters, diese will ich dann dem User als std::list<class enumerated> geben, der darf sich dann eins aussuchen und an engine->getdevice() übergeben. Wenn er nicht will kann er auch ein vordefiniertes enumerated benützen.
Nun will ich aber neben diesem vordefinierten und der in der Klasse DDEnumerate enumerierten Instanzen keine weiteren zulassen. Sonst könnte mir der User ja ein modifiziertes Objekt übergeben - das will ich auf jeden Fall verhindern.
Zeit um wieder langwierig Prüfungen durchzuführen habe ich nicht.
MfG SideWinder
-
Gibts dafür kein Design Pattern?
MfG SideWinder
-
SideWinder schrieb:
Gibts dafür kein Design Pattern?
Ein passendes Design-Pattern wäre Factory.
Die Existenz eines Design Patterns ändert allerdings nichts an der Tatsache, dass du in C++ bestimmte Dinge tun musst um bestimmte Dinge zu bewirken.Es gibt in C++ verschiedene Möglichkeiten die Instanziierung einer Klasse zu verhindern/einzuschränken:
1. Konstruktoren private machen
2. Die Klasse abstrakt machen
3. Den Dtor private machen (erlaubt nur Heap-Objekte)
4. op new private machen (erlaubt nur Stack-Objekte)
... (viele Dinge die mir jetzt nicht einfallen)In deinem Fall hilft eigentlich nur 1. Dazu kannst du entweder eine Factory-Klasse bauen, wie du es selbst vorgeschlagen hast oder du erweiterst deine Klasse um Factory-Methoden.
-
Okay dann wird die Klasse Enumeration einfach friend von Enumerated und fertig - fühlt sich zwar nicht sonderlich toll an aber besser als der User pfuscht mir rein
Danke trotzdem
MfG SideWinder
-
fühlt sich zwar nicht sonderlich toll an
Warum nicht ?
Ist doch genau was du willst ... und durchaus gaengige Vorgehensweise.
Diverse Factory Implementationen machen es genau so.Ciao ..