Ein Objekt einer Klasse aufgrund eines Strings erzeugen...



  • Und noch eine Frage :)... ich hoffe ich Frage nicht zu viel :)...

    Also ich würde gerne in einer Datei (XML) Elemente angeben die dann als Objekte erzeugt werden :)... also so eine Art Serialisierung...

    <button ...> </button> sollte also dazu führen, dass ein Objekt von CButton erzeugt wird...

    <picture ...> </picture> sollte dafür sorgen, dass ein Objekt von CPicture erzeugt wird...

    Jetzt könnte ich das ganze natürlich über eine switch-case-Anweisung machen... gibt es eventuell eine andere Möglichkeit aufgrund des Elementnamens ein Objekt der Klasse C + Elementnamen zu erzeugen... also Cbutton, da es ein Element <button .../> gibt. So eine Funktion nach CreateObjectFromClass?

    Warum frage ich :)... die Sache mit der Case-Anweisung würde dazu führen, dass jedesmal wenn ein neues Element hinzugefügt wird auch diese Anweisung angepasst werden müßte... das würde ich gerne umgehen :)...

    Danke für Anregungen/Lösungen/ ...



  • Hallo,
    Stichwort: Factory.



  • Ahh das Entwurfsmuster kenn ich... mal suchen wo das war :)...



  • Ach ja... hab jetzt mal wieder alte Unterlagen rausgekrammt und doch etwas gefunden :)... aber in Java gibt es ja einen Typen Namens Class mit dem man Klassen aus Strings erzeugen kann... gibt es soetwas auch in C++?

    private Class the_class;
    public box(Class a_class) {
      the_class = a_class;
    }
    
    public void insert_new_card() {
      IClass c;
      c = (IClass) the_class.newInstance();
      box.add(c);
    }
    

    Also soetwas wie the_class.newInstance(); bzw. den Typen Class... gibt es soetwas auch in C++ bzw. ist soetwas möglich?

    Danke



  • Kauf dir das Buch "Modernes C++ Design", da stehen solche wichtigen Sachen sehr gut erklärt drin. Das kann man also auch in C++ hinbekommen. Oder du schaust dir die Loki-Library an (kann man kostenlos runter laden), die zu dem Buch dazu gehört.



  • Oder lass dir einfach gesagt sein dass es sowas in C++ nicht gibt.
    Natürlich lässt sich das gewünschte Verhalten in C++ hinbekommen, aber nicht SO und nicht so einfach.


Anmelden zum Antworten