Ich folge Lars Haendels Functor tutorial auf newty.de, um ein Callback-System einzurichten. Ich bin jedoch ein wenig verwirrt und ich hoffe, dass jemand mir helfen kann.C++ Functor Callback Setup
Hier ist meine Functor Vorlage
#include <igameevents.h>
// Abstract Base Class (Functor)
class TBaseCallback
{
public:
// two possible functions to call member function. virtual cause derived
// classes will use a pointer to an object and a pointer to a member function
// to make the function call
virtual void operator()(IGameEvent *pEvent){}; // call using operator
virtual void Call(IGameEvent *pEvent) {}; // call using function
};
// Derived Template Class
template <class TClass> class TEventCallback : public TBaseCallback
{
private:
void (TClass::*funcPtr)(IGameEvent*); // pointer to member function
TClass* thisPtr; // pointer to object
public:
// constructor - takes pointer to an object and pointer to a member and stores them in two private variables
TEventCallback(TClass* _thisPtr, void(TClass::*_funcPtr)(const char*))
{ thisPtr = _thisPtr; funcPtr=_funcPtr; };
// override operator "()"
virtual void operator()(IGameEvent *pEvent)
{ (*thisPtr.*funcPtr)(pEvent); }; // execute member function
// override function "Call"
virtual void Call(IGameEvent *pEvent)
{ (*thisPtr.*funcPtr)(pEvent); }; // execute member function
};
Was ich tun möchte, ist im Grunde andere .dlls erlauben meine HookGameEvent() Funktion zu nutzen, und wenn ein Spielereignis aufgerufen wird, kann ich durch einen Vektor laufen | | Liste meiner Hooks, überprüfen Sie, ob der Name des Ereignisses übereinstimmt, und führen Sie die Callbacks nach Bedarf aus. Was mich jedoch verwirrt, ist, wie ich den Callback in meiner HookEvent-Struktur speichern kann, die so aussieht.
Ich habe es für jetzt auskommentiert, aber ich bin sicher, es ist offensichtlich, was ich verwirrt bin und wo ich vermasseln. Wenn jemand Hilfe leisten kann, wäre das sehr willkommen.
Ich konnte nicht anders, als festzustellen, dass Ihr Funktionszeiger in der TEventCallback-Klasse mit einem Parameter (const char *) definiert ist, aber Sie rufen ihn mit einem (IGameEvent *) im Code auf. – Daemin
Das zeigt den Wert von typedefing-Funktionstypen. @Brett: Wenn Sie mit Fehlermeldungen zu tun haben, wäre es für uns sehr hilfreich, wenn Sie sie in Ihre Frage aufnehmen würden. Wenn der Code aus anderen Gründen nicht erreicht, was Sie wollen, wäre es auch hilfreich, wenn Sie uns diese mitteilen. Denken Sie daran, erzählen Sie uns, was Sie wollen und was tatsächlich passiert, sonst raten wir nur. – outis
Das Problem, das ich hatte, war, wie man es in die Struktur einfügt, das (const char *) war nur übrig von, als ich dieses Tutorial benutzte. –