声明:因网易博客将关闭,移到此
重新修改版本
#ifndef HANDLE_H
#define HANDLE_H
#include
#include
using namespace std;
//----------------------------------------------------------------------
//
class EventArgs
{
public:
string mType;
void * mData;
EventArgs() : mType(“unknow”), mData(NULL) {}
EventArgs(const string& type, void* data = NULL) : mType(type), mData(data) {}
};
//----------------------------------------------------------------------
//
class AbstratSlot
{
public:
virtual ~AbstratSlot() {}
virtual bool execute() = 0;
virtual bool execute(const EventArgs& e) = 0;
};
//----------------------------------------------------------------------
//
typedef bool (Function)(const EventArgs& e);
class FunctorSlot : public AbstratSlot
{
public:
FunctorSlot() : mFunc(NULL)
{}
-
FunctorSlot(Function func, const EventArgs& e)
-
mFunc(func), mArgs(e)
{}
bool execute() { if (mFunc) return (*mFunc)(mArgs); return false; }
bool execute(const EventArgs& e) { if (mFunc) return (*mFunc)(e); return false; }
protected:
EventArgs mArgs;
Function *mFunc;
};
//----------------------------------------------------------------------
//
template
class MemberSlot : public AbstratSlot
{
public:
MemberSlot() : mFunc(NULL)
{}
typedef bool (T::MFunction)(const EventArgs&