Instanz zur Laufzeit erzeugen



  • Hallo!
    Mich würde interessieren ob es eine Möglichkeit besteht zur Laufzeit im Projekt enthaltene aber nicht Instanzierte Steuerelemente zu bestimmen und anschließend Instanzen davon zu erzeugen. Wie sieht es aus, wenn nur die Bezeichnung und der Typ des Controls bekannt sind + dieses Control ist in dem gleichen Projekt in dem es erzeugt werden soll - Ist das Instanzieren dann möglich?

    Ich hoffe meine Frage ist verständlich genug formuliert und du hast etwas Zeit!?



  • Hallo

    Du kannst von jeder bekannten Klasse Instanzen erstellen wie du willst.
    Was du in C++ nicht kannst ist aus einem Namen einer Klasse heraus eine Instanz zu erzeugen. Denn zur laufzeit gibt es in C++ keine namen mehr, nur Speicheradressen. Was du aber machen kannst ist eine gewisse Menge von bekannten Klassen zusammenfassen und eine sogenannte Factory zu schreiben, die anhand eines Strings eine Instanz der Klasse erstellt. Ein einfaches Beispiel

    TControl* Create(const AnsiString& name, TObject* owner)
    {
      if (name == "TEdit")
        return new TEdit(owner);
      if (name == "TComboBox")
        return new TComboBox(owner);
      return 0;
    }
    

    bis bald
    akari



  • Danke akari, dass du dir Zeit genommen hast! Ich schaue mir das Entwurfsmuster Factory mal genauer an. Hat jemand einen Link mit einer vernünftigen Beschreibung der einzelnen Muster?



  • Hallo

    Einfach mal im Netz suchen, beginnend bei der Wikipedia. Eventuell auch ein passendes Buch lesen.

    bis bald
    akari


Log in to reply