C++ wie wird hier die Schnittstelle definiert!?



  • Hallo Leute,

    ich hab folgenden Codeschnippsel (in QT) gefunden!?

    // this struct calls "myCustomDeallocator" to delete the pointer
                struct ScopedPointerCustomDeleter2
                {
                    static inline void cleanup(int *pointer)
                    {
                        delete pointer;
                    }
                };
    
                // QScopedPointer using a custom deleter:
                QScopedPointer<int, ScopedPointerCustomDeleter2> customPointer(new int);
    

    Dem Object QScopedPointer kann man ein custom Deleter übergeben, in dem fall "ScopedPointerCustomDeleter2" aber wo is hier nun die schnittstelle zu funktion
    "void cleanup(int *pointer)" ? Die struktur muss diese funktion enhalten dass es funkltioniert! aber wie macht der compiler das?

    ich kenne es nur aus C#, da müsstte die struktur eine Interface implementieren, oder ich würde via Refelctions checlen ob die funktion v orhanden ist!
    Aber wie funktioniert das hier?

    Danke 🙂 Ich sehe schon c++ ist wieder ganz neue für mich^^



  • aaahhhh.. ich glaub das geht wg. dem schlüssewort static!

    Intern sowas wie

    T::cleanup(...);
    

    oder?



  • struct ScopedPointerCustomDeleter2 {
    	static inline void cleanup(int* pointer) {
    		delete pointer;
    	}
    };
    
    template<typename T>
    void test(int* toDelete){
    	T::cleanup(toDelete);//jo, genau wie Du schreibst
    }
    //toDo: test() in einen Destruktor einer Klasse ScopedDeleter oder so tun
    
    int main() {
    	int* pi=new int;
    	test<ScopedPointerCustomDeleter2>(pi);
    }
    


  • Das inline keyword ist in diesem Fall uebrigens unnoetig und stoert den Lesefluss unnoetigerweise.


Anmelden zum Antworten