Ich betrete einen Bereich, der neu für mich ist, aber im Grunde muss ich Callbacks in C++ implementieren. Ich entwerfe ein Toolkit, mit dem ich mein Leben vereinfachen kann. Im Grunde ist es ein .dll-Plugin, das meinen anderen .dll-Plugins viele Funktionen bietet.C++ Rückrufe? Sollte ich Member Func Pointer/Delegierte/Events benutzen?
Eine dieser Funktionen ist HookEvent (const char * Ereignisname, void * Callback), die es mir ermöglichen, verschiedene Ereignisse, die ausgelöst werden, haken. Hier wäre ein Beispiel ...
Example_Plugin1.dll tut HookEvent ("player_spawn", & Plugin1 :: Event_PlayerSpawn); Example_Plugin2.dll tut HookEvent ("player_spawn", & Plugin2 :: Event_PlayerSpawn);
Ich muss herausfinden, die beste (und vorzugsweise einfachste) Methode der Einrichtung eines Callback-System, das dafür gut funktioniert. Ich habe jetzt ein paar Stunden C++ Callbacks gelesen und viele verschiedene Ansätze gefunden.
Ich nehme an, die einfachste Sache zu tun wäre, eine Vorlage zu erstellen, und verwenden Sie typedef bool (ClassName :: * EventHookCallback) (IGameEvent, Bool); Danach bin ich ein bisschen neblig.
Ich habe auch gelesen, dass Delegaten oder ein .NET-Stil-Event-System andere mögliche Ansätze sind. Ich bin schon etwas verwirrt, also möchte ich mich nicht mehr verwirren, denke aber, dass es sich lohnt, danach zu fragen.
Hier ist ein Link zu dem C++ .NET Stil-Ereignissystem, über das ich gelesen habe. http://cratonica.wordpress.com/2010/02/19/implementing-c-net-events-in-c/
Also was schlagen Sie vor? Irgendwelche Tipps, so weit wie es zu implementieren wäre am meisten geschätzt.
Ich hoffte, es zu tun, ohne Boost oder eine andere zusätzliche Bibliothek zu verwenden, wenn möglich. Wäre das wirklich so viel einfacher als nur mit Mitgliedsfunktionszeigern oder Delegaten? –
Wenn Sie einfache gelegentliche Rückrufe benötigen, dann ist das Overkill. Für eine umfassendere Observer-Implementierung wird dies hilfreich sein.Die Kosten/Nutzen-Entscheidung hängt von Ihren Erwartungen ab. Wenn Sie in Ihrem Compiler C++ 0x haben, können Sie dem Delegaten sogar ein Lambda (lokale anonyme Funktion) zuweisen. Überprüfen Sie dies: http://uint32t.blogspot.com/2009/05/using-c0x-lambda-to-replace-boost-bind.html –
Ich mag das eigentlich, aber ich denke, ich werde nur damit gehen System, wie es mir von allem, was ich bisher gesehen habe, am verständlichsten erscheint. http://cratona.wordpress.com/2010/02/19/implementing-c-net-events-in-c/ –