S
RHBaum schrieb:
Aehm bitte ?
Paar beitraege weiter vorn hasst mir noch erklaert, das funktor != Funktionspointer :p Sonst wuerde das mit inlinen ned funktionieren ....
Sind wir lustig?
functors sind eine Art von Funktionszeigern, lediglich ein bisschen mächtiger. Aber sie haben das selbe Prinzip wie ein Funktionszeiger...
Ja, aber in klassischen Anwendungsfall (also da wo C Funktionspointer nimmt) brauchst du ja genau so viele funktionsdefinitionen ... ob die alle einzeln deklarierst oder an Klassen haengst, mir sind in diesem Falle die Klassen lieber.
Blödsinn.
Funktion != Klasse
Es geht hierbei darum, dass du nicht immer eine fette Klasse machen kannst die alle Interfaces implementiert (schau dir mal schlecht designte Java Klasse an die 500 interfaces implementieren...) und man nicht immer für jeden forwarder eine eigene Klasse schreiben kann.
Wie würdest du mein Menü Beispiel mit nur einer Klasse implementieren?
Recht hasst, wenn die funktion schon exisiert, und die eigentlich in ner operation nur noch verlinken willst (daran hab ich grad ned gedacht) ... Ich nutz aber dann den funktionspointer auch nicht roh, sondern ueber makros (windows message queue) oder ueber funktoren !
Makros sind böse. Und rohe Zeiger fasst man sowieso nicht an...
Dein Besipiel mit dem menu iss nen reiner funktionspointer ?
make_callback(this, Application::help) Application::help iss doch ned static ? Wie ist eigentlich die Aufrufsyntax ? denk this ist dein Applikation object was datzughoert ?
Was passiert, wenn wer von Application ableitet um nen neues Help zu implementieren?
Sorry, hab mir dein beispiel ned angeschaut ...
Schau dir boost::signal oder sigc++ an.
Application::help ist nicht statisch und this ist vom Typ Application*
Wie gesagt in deinem fall vielleicht ned relavant, weil er sein Application Object selber coden muss ... aber in Biblios mit vielen vordefinierten Grundfunktionalitaet isses doof, weil die virtualitaet eigentlich aushebelst / verbietet ...
Wie willst du 10 Menü Einträge in ein Menü packen wenn jedes Item eine andere Funktion aufruft? Du kannst natürlich jedesmal das ganze Menü neu implementieren, aber das will man nicht. Man 'hängt' einfach die passende Funktion ein und fertig.
Naja, in vielen sachen isses wirklich geschmacks -Sache ... QT benutzt auch extensiv funktionspointer (Signal / Slot) Ich finds ned schoen, weil man, wenn man eigene "Frameworks" auf sowas aufbaut, immer zwischenfunktionen reinhaengen muss, nur dafuer dass ableitungen spaeter funktionieren
oder man kann ihm Signal - Slot verbindungen ned vordefinieren ... auch doof(find ich)
Das ist aber der C++ weg.
Warum wird denn gtkmm als schön empfunden? Eben weil es solche Sachen schön löst. Virtuelle Methoden sind nicht die Antwort auf alles, sieht man super an Java.
Findest du die STL Algorithm auch schlecht? Die verlangen auch oft einen Funktionszeiger. Weil Vererbung einfach blödsinnig wäre...