zur laufzeit testen ob methode existiert



  • hallo leute

    gibt es ne moeglichkeit zur laufzeit herauszufinden, ob eine klasse eine bestimmte methode hat ?

    ich will in meinem vector bei der sortiermethode ein flag hinzufuegen, das bestimmt ob beim austauschen von 2 elementen das template-swap benutzt wird, oder ob die zu sortierenden elemente ne eigene swap methode mitbringen.

    oder muss ich da dann jeweils eine sortiervariante implementieren ?

    Meep Meep



  • Dafür gibt es doch die Template-Spezialisierungen.

    Beispiel:

    // Allgemein
    template<class T>
    void swap(T& x, T& y)
    {
           T help = x;
           x = y;
           y = help;
    }
    
    // Spezialisierung für Typ Klasse SPECIAL
    template<>
    void swap(SPECIAL& s1, SPECIAL& s2)
    {
        ...
    }
    

    Es wird nun immer die spezialisierte Funktion instantiert und aufgerufen, wenn die Argumente vom Typ SPECIAL sind. Ansonsten wird die allgemeine Template-Funktion instantiiert und aufgerufen.

    Oder verstehe ich was falsch?

    Caipi



  • hola Caipi

    muss man da dann bei der spezialisierung nicht die selbige fuer jede klasse machen ?
    ich dachte eben daran, das der compiler vielleicht selber rausfinden kann ob ne klasse ne eigene swap-methode mitbringt oder nicht.

    Meep Meep



  • Meep Meep schrieb:

    hola Caipi

    muss man da dann bei der spezialisierung nicht die selbige fuer jede klasse machen ?

    Soweit ich weiß musst du für alle Klassen, die 'anders' sortiert werden sollen, eine Spezialisierung treffen.

    ich dachte eben daran, das der compiler vielleicht selber rausfinden kann ob ne klasse ne eigene swap-methode mitbringt oder nicht.

    Meep Meep

    Der Compiler sollte das schon selbst rausfinden. D.h. wenn du eine Methode einer Template-Klasse für einen bestimmten Typ spezialisiert hast und dann von ebendiesem Typ ein Objekt instantiiert, dann wird für das Objekt die spezielle Methode instantiierst und sie wird dann letzendlich auch aufgerufen, bei einem obj.swap(x, y); o.ä.

    Oder meintest du was anderes?

    Caipi



  • re

    ich probier das mal mit der spezialisierung. leider hab ich damit noch nie was gemacht.

    wo wird die spezielisierung geschrieben ? in meinem vector oder in der klasse selbst, die die swap funktion beinhaltet ?

    irgendwie check ich das nicht so ganz, wie das laufen soll.

    Meep Meep


Anmelden zum Antworten