Wie soll man das machen?
-
warum gehen funktionszeiger nicht?
was ist mit funktoren?
-
Methodenzeiger an sich, sind da leider ziemlich eingeschrängt.
Deshalb: http://www.gotw.ca/gotw/083.htm
Letztendlich sind Callbacks in C++ ein ziemliches Disaster.
-
ist in anderen sprachen nicht anders
-
Original erstellt von <peter>:
ist in anderen sprachen nicht andersSeh ich nicht so. In C hat man eh keine Klassen und nimmt halt simple Funktionszeiger. In Java gibts doch diese Event-Listener, oder wie die sich nennen. Kriegt man leider in C++ auch nicht vernünftig hin.
-
Ich würde es ähnlich in Java machen, da es dort ziemlich gut durchdacht ist. Man muß es ja nicht 1:1 übernehmen (können)? Aber rein vom Prinzip her.
Ich würde eine Klasse ActionListener schreiben, die rein virtuell ist. Dann eine zweite Klasse, die einmalig instanziert werden kann (also static ist) und die Events des Betriebssystems abfängt bzw. von eben diesem mit Infos versorgt wird. Diese Klasse würde ich ListenerManager nennen.
Der ListenerManager verwaltet ActionListener und diese wiederrum die Buttons etc.
Drückt man den Button, bekommt der ListenerManager den Mouseklick vom OS, und jetzt muß halt die Info irgendwie an die ActionListener weiter gereicht werden. Diese wiederrum kennen ihre Buttons und müssen entsprechend reagieren. So in etwa...
Evtl. vielleicht auch, das die Buttons sich immer autom. beim ListenerManager "anmelden", und dieser immer bescheid weiß wie er die Daten fix und fertig an die ActionListener aufbereitet liefern kann und auch nicht alle Listener unnötig versorgen muß. Das wäre wohl eher die optimalere Lösung.
-
Les mal meinen Functorbetrag etwas unter dem hier.
Ein Functor ist eigentlich ein gekapselter Funktionszeiger, nur dass er noch das this speichern kann und somit auch auf nicht-statische Klassenmethoden zeigen kann!
ChrisM
-
sicher Chris? für mich ist ein functor was anderes
-
Was denn?
www.function-pointer.org - Da gibts Infos über FunctorsChrisM
-
das sind falsch informationen
-
Das scheitert leider an der Umsetzung. In Java kann man das gut machen, weil verschachtelte Klassen ein Teil der Klasse drüber sind. In C++ müsste man ein this übergeben usw. Da machts keinen Spaß mehr.
-
Ein Functor ist eigentlich ein gekapselter Funktionszeiger, nur dass er noch das this speichern kann und somit auch auf nicht-statische Klassenmethoden zeigen kann!
Nope! Ein Functor ist eine Instanz einer Klasse, die als Funktion agiert, also deren operator() überladen ist.
In dem von dir angegeben Artikel steht nur, das ein Funktor einen Funktionszeiger kapseln kann, ... , was auch nicht falsch ist.