Designfrage
-
Hi!
Folgendes Problem:
Forms ist eine Container-Klasse und verwaltet, erstellt und zerstört die Form-Objekte.
Form soll aber nicht erstellt werden können (privater Konstruktor), sondern nur von Form abgeleitete Klassen.
Wie kann ich das am besten lösen?Bis jetzt siehts so aus:
framework::Forms * forms = framework::Forms::getInstance(); framework::Form * menu = forms->createForm(); menu = static_cast<Formulare::Menu*>(menu);
mfg
-
Hallo
Du brauchst bloß Forms mindestens eine akstrakte virtuelle Methode geben, dann kann man von Forms direkt keine Instanzen erzeugen.
bis bald
akari
-
Form-Objekte kann man ja nur über das Forms Objekt erstellen, da der Form-Konstruktor private ist. Das ist nicht das eigentliche Problem.
Was ich eigentlich will, ist, dass das Forms Objekt von Form abgeleitete Klassen instanzieren kann, ohne diese vorher zu kennen, damit ich nicht noch irgendwelche casts machen muss.
mfg
-
Hallo
framework::Form * menu = forms->createForm(); menu = static_cast<Formulare::Menu*>(menu);
Ich glaube, du mißverstehst da etwas. Eine Instanz bleibt immer vom selbem Typ, egal wie sie gecastet wird.
Das heißt, wenn du ein Formulare::Menu mit new erstellst, ist und bleibt es ein Formulare::Menu, auch wen du es als framework::Form ansprichst.
Du mußt einfach nur mit forms->createForm() eine gültige Instanz von Formulare::Menu zurückgeben. Solche Factory-Methoden kann man gut durch Polymorphie erreichen, oder du übergibst einen Parameter, der denn gewünschten Typ angibt.
Im nachhinein kann man den Typ einer Instanz nicht mehr ändern.bis bald
akari
-
Hi!
Hab schon länger kein C++ mehr programmiert, deshalb die Fehler...
Ich habs jetzt so gelöst:
framework::Forms * formulare = framework::Forms::getInstance(); Formulare::Menu * menu = formulare->createForm<Formulare::Menu>();