0
我正在尋找關於最佳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;
};
任何和所有的意見/建議讚賞。謝謝!
這個問題是,數據需要基本上每一幀更新,除非回調引用的所有它傳遞給構造函數我想。我不確定這是一個多好的設計。 – Pat 2013-04-10 21:26:25
@Pat:在這種情況下,它應該傳遞給'Excecute_Callback()'或Callback應該能夠請求這些數據 – 2013-04-10 21:43:09