Frage von panakotta00, 31

[C++] EventHandling wie in Java, ist das Möglich?

Hi Leute, ich habe für mich eine Kleine "API" geschrieben, einen IRC_Client. Nun möchte ich das man, wenn man die API Includiert und in einer Variable die Klasse mit dem Konstruktor erstellt hat, mit einer Funktion z.B. "void addCommand(char *cmd, arg2)" einen Befehl hinzufügt, wenn das erste wort einer eingehenden nachricht dem "char *cmd" entspricht, eine funktion, die mittels "arg2" übertragen wird, ausgeführt. ist das möglich?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Mikkey, 8

Wenn Du es selbst programmierst, ist das selbstverständlich möglich. Stichworte: Funktionszeiger, Lambda-Ausdrücke, std::function. Du musst nur auf die Thread-Entkopplung achten, da im Signalverarbeitungs-Koontext keine zeitaufwendigen Aktionen und keine Aktionen der Bedienoberfläche ausgeführt werden können.

Mit dem QT-Framework kannst Du auch die Signal/Slot-Mechanik verwenden.

Kommentar von regex9 ,

Bitte Qt, nicht QT. Qt-Entwickler mögen es nicht gern, mit der Abk. für Quicktime konfrontiert zu werden. 😝

Kommentar von TeeTier ,

Beruhigungsmusik für empfindliche QT-Programmierer*:

https://www.youtube.com/watch?v=NbTEVbQLC8s

* nur echt mit QT :)

Kommentar von Mikkey ,

Da arbeitet man monatelang mit der Umgebung, merkt sich immerhin, dass es nicht "Kuh-Tee" heißt und macht doch etwas falsch :-(

Antwort
von regex9, 2

Den letzten Teil habe ich leider noch nicht ganz verstanden, es ist umständlich geschrieben.

Aber sollte ein Observer-Pattern (https://sourcemaking.com/design_patterns/observer/cpp/3) für deine Ansprüche nicht ausreichen?

Ansonsten würde ich wie Mikkey das Signal-Slot-Konzept empfehlen. Entweder mithilfe einer externen Library, Qt oder selbst programmiert. Ab Qt5 und C++11 kannst du sogar Lambdas dafür verwenden: http://artandlogic.com/2013/09/qt-5-and-c11-lambdas-are-your-friend/

Antwort
von panakotta00, 4

Danke Mikkey. Hast mir echt geholfen, Daumrn hoch ^_^

Keine passende Antwort gefunden?

Fragen Sie die Community