0

我正在寻找关于完成我将要描述的最佳 OO 方式的意见。我正在编写将成为游戏等事件系统的东西,我希望它尽可能地可扩展,因为有很多抽象类。其中两个是监视器,它们被分配用于监视一个事件,以及回调,它们包装了事件发生时要调用的函数指针。当我想发送回调需要的数据时,就会出现问题。将发送的数据将是子类特定的(取决于函数签名)并存储在子类监视器中。我希望能够在调用执行之前将此数据传递给回调,但由于从监视器的角度来看一切都是抽象的,这很困难。我' 我正在寻找有关如何以可能的最佳 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;
};

任何和所有意见/建议表示赞赏。谢谢!

4

1 回答 1

1

如果我正确理解了您,则应将此数据提供给回调构造函数。假设您拥有Callback1Callback2派生自DIVE_GUI_Callback. 所以代码可能如下所示:

DIVE_GUI_Event_Monitor* monitor; 
monitor->Add_Callback(Callback1(specific_data_1));
monitor->Add_Callback(Callback2(specific_data_2));

然后,此特定数据将用于Excecute_Callback().

于 2013-04-10T20:55:07.620 回答