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.