コールバック システムをセットアップするために、newty.deの Lars Haendel のFunctor チュートリアルに従っています。私は少し混乱していますが、誰かが私を助けてくれることを願っています.
これが私の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() 関数を使用できるようにすることです。ゲーム イベントが呼び出されたときに、フックの vector||list を実行し、イベント名が一致するかどうかを確認してから、必要に応じてコールバックします。私を混乱させているのは、このような HookEvent 構造体にコールバックを格納する方法です。
std::vector<EventHook*> m_EventHooks;
struct EventHook
{
char *name;
EventHookMode mode;
//TEventCallback<IGameEvent*> pEventCallback;
};
今のところコメントアウトしていますが、何が混乱しているのか、どこで失敗しているのかは明らかです。誰かが何か援助を提供できるなら、それは大歓迎です。