[Benachrichtigung] Denkanstösse ?
-
Hallo,
ich suche gerade nach einer schönen Möglichkeit, den Benutzer meiner Schnittstelle bei Zustandsänderung zu benachrichtigen:
(1) Aus java hab ich da noch Event-Handler im Hinterkopf. Man könnte ein Observer-Muster implementieren, aber ich habe eine prozedurale Schnittstelle (bersteht nur aus Fkt. keine Klassen) und keine Idee, wie's es dort einzubauen geht. Deshalb kommt diese Lösung ganz nach hinten.
(2) In C++ gibt's die Funktionszeiger, mit denen sich einfach Callbacks realisieren lassen. Nun hab ich damit das Problem, dass sich Funktionszeiger zwar prima in meine Schnittstelle integrieren lassen, aber wenn ich die Schnittstelle in Klassen verwende, kann ich nur statische Methoden übergeben und das ist eine unangenehme Einschränkung.
(3) Zustand über eine Fkt. (getState()) mitteilen. Ist im Moment mein Favorit. Einfach in einer OO-Umgebung zu verwenden. Dafür muss ich in Kauf nehmen, das ich ständig die Fkt. aufrufen muss, um keine Änderung zu verpassen.
Eine Möglichkeit wären vllt noch Windows-Messages, aber mit denen habe ich bisher noch nicht (in meiner Schnittstelle) gearbeitet und hab keine Vorstellung von dem Aufwand.
Also das sind meine Ideen. Gibt's noch andere Lösungen, bzw. was bevorzugt ihr?
Danke,
don_basto.
-
Du könntest die zweite Möglichkeit auch so umwandeln, daß du statt Funktionszeigern Objekte übergibst (der Benutzer gibt dir ein von 'callback' abgeleitetes Objekt und du rufst dessen Member changed() auf, wenn etwas passiert ist).
-
Du kannst das Command Pattern benutzen, in der kostenlosen Loki Library ist ein Template dafür da.
Oder du kannst auch Signal-Slots benutzen, implementierungen gibt es in Boost und in libsig++ (heißt die so).