Functor vs. Function Pointer
-
Eigentlich sind Function-Pointer in der OOP doch besser durch Functionoids(Functors) zu ersetzen.
Wenn z.B. man in einer Funktion einen Parameter hat, der ein Function-Pointer ist, dann waere es doch auch moeglich, diesen FP durch eine Functor-ABC zu ersetzen und die jeweilig gewuenschte Operation dann in konkreten abgeleiteten Klassen zu realisieren. Dynamic binding erledigt dann den Rest.
Oder ist da ein Haken dabei?
-
Gratulation, du hast soeben das Command-Pattern neu erfunden
-
In .Net geht man mit den Delegates einen IMHO interessanten Mittelweg, sie fühlen sich fast wie Funktionszeiger an, sind aber Objekte und es kümmert sie auch nicht, ob sie auf ne statische Methode oder Instanzmethode zeigen. Sehr angenehm zu benutzen, wie ich finde, insbesondere auch durch Featueres wie asynchrones Aufrufen der Zielfunktion und anschließendes synchronisieren mit EndInvoke().
-
@Bashar:Nein, sag mal im Ernst.
Ist diese Loesung realistisch?
Oder habe ich da grade das Rad nur neu erfunden?
-
Du hast das Rad neu erfunden. In Java ist das aus ... gewissen Gründen ... gängige Praxis (vgl. Runnable).
-
Verdammt!
-
heisst aber function object pattern.
command pattern ist bisschen was anderes.
-
Erklär.
-
Raptor schrieb:
Eigentlich sind Function-Pointer in der OOP doch besser durch Functionoids(Functors) zu ersetzen.
Wenn z.B. man in einer Funktion einen Parameter hat, der ein Function-Pointer ist, dann waere es doch auch moeglich, diesen FP durch eine Functor-ABC zu ersetzen und die jeweilig gewuenschte Operation dann in konkreten abgeleiteten Klassen zu realisieren. Dynamic binding erledigt dann den Rest.
Oder ist da ein Haken dabei?also meine bescheidene beobachtung zeigt, daß ich function pointers nur benutze, wenn mich eine lib, die ich verwenden mag, dazu zwingt. also normalerweise die winapi mit callbacks.
in libs, die ich selber designe, sind seit 8 jahren keine function pointers mehr entstanden.aber es kann gründe für function pointers geben. eigentlich nur einen: performance. ich meine, zu ahnen, leicht in erinnerung zu haben, daß boost::shared_ptr implementiert ist als zaiger auf das objket und zeiger auf eine destruier-funktion. und nicht als zeiger auf objekt und zeiger auf destuier-objekt. ich schätze, du solltest dich zwei tage mit boost::shared_ptr auseinadersetzen und weißt dann mehr als wir alle darüber.
nett wäre es, wenn du dann ein kurzest statement hier absetzen könnest, zu welchem schluss du gekommen bist.