我正在寻找关于最佳OO方式的意见,以实现我将要描述的内容。我正在编写将成为游戏等事件系统的东西,我希望它尽可能地扩展,因为有很多抽象类。其中两个是分配用于监视一个事件的监视器,以及回调函数,它们包含要在事件发生时调用的函数指针。当我想发送回调需要的数据时,会出现问题。将要发送的数据将是特定于子类的(取决于函数签名)并存储在子类监视器中。我希望能够在调用execute之前将这些数据传递给回调,但由于从监视器的角度来看一切都是抽象的,因此这很困难。我正在寻找关于如何以最好的OO方式做到这一点的建议,因为我还没有想出任何我太喜欢的东西。由于回调被发送到另一个实际调度的类,因此数据需要在某些时候进入它们内部。
供参考,监视器抽象类
#pragma once
#include "DIVE_GUI_Types.h"
#include "DIVE_GUI_Callback.h"
#include "DIVE_GUI_Event_Dispatcher.h"
#include <map>
#include <string>
/*
Class to monitor events to be handled by the event system.
*/
class DIVE_GUI_Event_Monitor
{
private:
friend class DIVE_GUI_Kernel;
DIVE_GUI_Event_Dispatcher* m_Dispatcher;
static DIVE_HANDLE m_Active_GUI;
protected:
const std::string m_Event_ID;
std::map<DIVE_HANDLE, DIVE_GUI_Callback*> m_GUI_Map;
virtual bool Dispatch() = 0;
public:
void Update();
std::string Get_Event_ID() const { return m_Event_ID; }
DIVE_GUI_Event_Monitor(const std::string& id) : m_Event_ID(id) { }
void Add_Callback(DIVE_HANDLE, DIVE_GUI_Callback* function);
};
回调抽象类
#pragma once
/*
Abstract class representing a wrapper for a callback function as per the Command design pattern.
*/
class DIVE_GUI_Callback
{
public:
virtual void Excecute_Callback() const = 0;
};
感谢所有意见/建议。谢谢!
答案 0 :(得分:1)
如果我正确理解你,这个数据应该提供给回调构造函数。假设您从Callback1
派生Callback2
和DIVE_GUI_Callback
。所以代码看起来像:
DIVE_GUI_Event_Monitor* monitor;
monitor->Add_Callback(Callback1(specific_data_1));
monitor->Add_Callback(Callback2(specific_data_2));
然后,这些特定数据将用于Excecute_Callback()
。