Я следую учебнику Ларса Хенделя Functor на newty.de, чтобы настроить систему обратного вызова.Однако я немного сбит с толку и надеюсь, что кто-то может мне помочь.
Вот мой шаблон Functor
#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
};
Что я хочу сделать, так это разрешить другим .dll использовать мой HookGameEvent.(), и когда вызывается игровое событие, я могу пройти через список || моих хуков, проверить, совпадает ли имя события, а затем выполнить обратные вызовы по мере необходимости.Что меня смущает, так это то, как я могу сохранить обратный вызов в моей структуре HookEvent, которая выглядит следующим образом.
std::vector<EventHook*> m_EventHooks;
struct EventHook
{
char *name;
EventHookMode mode;
//TEventCallback<IGameEvent*> pEventCallback;
};
Пока я закомментировал это, но я уверен, что очевидно, с чем я запутался и гдеоблажаюсьЕсли кто-то может оказать какую-либо помощь, он будет очень признателен.