我在 newty.de 上关注 Lars Haendel 的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;
};
我现在已经把它注释掉了,但我确信它很明显我对什么感到困惑以及我在哪里搞砸了。如果有人可以提供任何帮助,将不胜感激。