Wann macht ein Funktor Sinn?
-
siehe Titel.
-
Hm, wann macht eine Funktion wohl "Bedeutungsinhalt"? Überhaupt nicht, oder kann Sinn fertigen?
-
Wunderschön
was war das?
Der Dativ ist dem Genetiv sein Tod?
zumindest hab ichs schonmal gelesen
so jetzt bitte ne sinnvolle Antwort.
-
z.B. wenn du die algorihtmen der STL verwenden möchtest
-
Ich meine im komplett selbst erstellten Kontext.
Was ist der Vorteil gegenüber functionpointern.
-
JustAnotherNoob schrieb:
Was ist der Vorteil gegenüber functionpointern.
Wenn die Funktion eigenen Zustand haben soll, also z.B. beim Iterieren über irgendwas Informationen sammeln soll, die man später auswertet.
-
functors kann man inlinen, function pointer nur sehr schwer
-
Was ist eigentlich ein Funktor?
-
Ein Funktionsobjekt.
In C++ eine Klasse, die den () Operator überläd.
-
Funktionsobjekte. Also Objekte, die lediglich eine Funktion enthalten/wrappen
http://de.wikipedia.org/wiki/Funktor
struct Functor { bool operator()(int a, int b) { return a<b; } }
-
class Add { public: int operator()(int i, int j) { return i+j; } } Add f(); f(2,5);
-
Shade Of Mine schrieb:
functors kann man inlinen, function pointer nur sehr schwer
Zeig mal eine Situation, wo man einen Funktor inlinen kann, die äquivalente Formulierung mit Funktionspointern aber nicht.
-
Funktoren machen an mehreren Stellen Sinn. Vielleicht etwas mehr zum Unterschied zwischen Funktionszeigern und Funktoren...
* Funktionszeiger können ausschließlich auf Funktionen zeigen
* Funktoren können (Da Objekte) noch andere Methoden und Werte Bereitstellen
* Funktoren erlauben auch nicht-statische Methoden (Sprich: es wird der Instanzzeiger und der Methodenzeiger im Objekt gemerkt), und sind nicht auf Funktionen oder statische Methoden beschränkt
* Funktoren können andere Aufrufe kapseln (z.B. aufrufe die eigentlich mehr Parameter benötigen würden, die aber von den Statuswerten des Funktors bereit gestellt werden.Für einen Undo/Redo-Mechanismus kann man z.B. Funktoren benutzen
Man legt in zwei Listen (einer Undo-Liste und einer Redo-Liste) bei jeder Aktion jeweils ein Funktionsobjekt ab, das einen entsprechenden Schritt macht - hierzu sind die eigenen Daten relevant, das Funktionsobjekt merkt sich also was zu tun ist.cu André
-
asc schrieb:
Für einen Undo/Redo-Mechanismus kann man z.B. Funktoren benutzen
Man legt in zwei Listen (einer Undo-Liste und einer Redo-Liste) bei jeder Aktion jeweils ein Funktionsobjekt ab, das einen entsprechenden Schritt macht - hierzu sind die eigenen Daten relevant, das Funktionsobjekt merkt sich also was zu tun ist.Da ist das Command-Pattern aber sinnvoller. Mit Functors wärst Du da ziemlich eingeschränkt was das Design betrifft.
-
nachgehackt schrieb:
Shade Of Mine schrieb:
functors kann man inlinen, function pointer nur sehr schwer
Zeig mal eine Situation, wo man einen Funktor inlinen kann, die äquivalente Formulierung mit Funktionspointern aber nicht.
*push*
-
std::sort versus qsort
ganz einfach.
functors kann ich inlinen weil sie zur compiletime ja schon feststehen, function pointer sind zeiger und zeiger sind nichts fixes.
-
nachgehackt schrieb:
Shade Of Mine schrieb:
functors kann man inlinen, function pointer nur sehr schwer
Zeig mal eine Situation, wo man einen Funktor inlinen kann, die äquivalente Formulierung mit Funktionspointern aber nicht.
Er hat ja nicht behauptet es gäbe eine solche. Er hat nur gesagt, dass es wesentlich einfacher ist einen Funktor zu inlinen als einen Funktionszeiger. Dies ist auch nicht schwer zu begründen da man beim Funktor legentlich den Typ braucht um inlinen zu können. Diese Information ist aber immer vorhanden ohne extra Arbeit zu erledigen. Um einen Funktionszeiger zu inlinen muss du zuerst beweisen, dass er nur einen bestimmten Werte annehmen kann und da er meistens von Funktion zu Funktion weitergereicht wird, ist das nicht so einfach.
-
Shade Of Mine schrieb:
std::sort versus qsort
ganz einfach.
functors kann ich inlinen weil sie zur compiletime ja schon feststehen, function pointer sind zeiger und zeiger sind nichts fixes.thx kumplé
-
Bashar schrieb:
JustAnotherNoob schrieb:
Was ist der Vorteil gegenüber functionpointern.
Wenn die Funktion eigenen Zustand haben soll, also z.B. beim Iterieren über irgendwas Informationen sammeln soll, die man später auswertet.
Da habe ich mich hier schon einmal eines besseren belehren lassen: Es ist besser, wenn Funktoren keinen Zustand halten, weil man nicht genau weiß, wann/wie Kopien von Funktoren erzeugt oder verwendet werden.
Gruß,
Simon2.
-
Ich hab noch nicht viel gesehen, was mit Funktoren gemacht wurde, aber meistens hat man sie verwendet, weil ne ordentliche Schnittstelle fehlte.