Funktionspointer einer Klasse übergeben



  • So, habe das ganze jetzt abgeändert und es funktioniert auch mit Pointer.

    Vielen Dank für die Lösungsansätze.



  • Da du dich eh schon in einer Klassen-Template befindest, dürfte es kein großes Problem darstellen, Sort zu einer Funktions-Template zu machen:

    template<typename Compare>
    void Sort(Compare comp) {
      // Sortierung hier. Ordnung ist durch comp(obj1, obj2) definiert.
    }
    
    void Sort() {
      Sort(std::less<E>());
    }
    

    ...so macht das beispielsweise auch std::list. Der Vorteil ist, dass du so nicht nur Funktionen, sondern auch Funktoren (d. h. Objekte, deren Klassen einen passenden operator() haben) als Ordnung benutzen kannst.



  • seldon schrieb:

    Da du dich eh schon in einer Klassen-Template befindest, dürfte es kein großes Problem darstellen, Sort zu einer Funktions-Template zu machen:

    template<typename Compare>
    void Sort(Compare comp) {
      // Sortierung hier. Ordnung ist durch comp(obj1, obj2) definiert.
    }
    
    void Sort() {
      Sort(std::less<E>());
    }
    

    ...so macht das beispielsweise auch std::list. Der Vorteil ist, dass du so nicht nur Funktionen, sondern auch Funktoren (d. h. Objekte, deren Klassen einen passenden operator() haben) als Ordnung benutzen kannst.

    Interessant. Werde ich so abändern und nutzen. Danke!



  • Am Rande: Was ist denn so falsch daran, Objekte in der main so zu erzeugen? Wie könnte man es besser machen? In dem C++ Tutorial wurde es so beschrieben. Unterschiede dabei liegen im Heap und im Stack.



  • trax1988 schrieb:

    Am Rande: Was ist denn so falsch daran, Objekte in der main so zu erzeugen? Wie könnte man es besser machen? In dem C++ Tutorial wurde es so beschrieben. Unterschiede dabei liegen im Heap und im Stack.

    In C++ gibt es keine Garbage Collection. Selbst Speicher verwalten ist furchtbar anstregend. ➡ Stackobjekte wo es nur geht, selbst Speicher verwalten sollte gänzlich vermieden werden



  • TestClass gurke; // <- dies erzeugt ein Objekt, nicht wie in Java!!
    


  • Achso. Ja, dass es keinen Garbage Collector gibt, weiss ich. Aber dafür kann man dynamische Objekte auch löschen mit delete.

    Aber danke für den Hinweis.



  • Ich hätte da noch eine letzte Frage, wofür ich keinen neuen Thread aufmachen will.

    Ich würde gerne mit Macros, z.B. "#define REGISTER_CLASS(CLASSNAME, PARENT)" innerhalb einer Klasse, die von einer anderen erbt, eine Instanz erzeugen und diese entsprechen in einen Vektor speichern.

    Ich habe also einen Vektor von der Elternklasse, also "vector<CInput*> m_inputFacory;". Sobald eine Kindsklasse deklariert ist, und mann z.B. das Macro mit "REGISTER_CLASS(CInputKind, CInput), soll in der Factory davon eine Instanz erzeugt werden und in den Vektor gespeichert werden.

    Ich habe mir schon ein paar Beispiele angeschaut, aber keines davon trifft auf meines zu.

    Jemand eine IDee, wie man das am besten umsetzen kann?

    Vielen Dank!



  • trax1988 schrieb:

    Ich hätte da noch eine letzte Frage, wofür ich keinen neuen Thread aufmachen will.

    Für jedes neue Thema bitte auch ein Thread!



  • asc schrieb:

    trax1988 schrieb:

    Ich hätte da noch eine letzte Frage, wofür ich keinen neuen Thread aufmachen will.

    Für jedes neue Thema bitte auch ein Thread!

    Alles klar.


Anmelden zum Antworten