2013-04-10 3 views
0

내가 설명하려고하는 것을 달성하기위한 최선의 방법론에 대한 의견을 찾고 있습니다. 저는 게임 등을위한 이벤트 시스템이 될 글을 쓰고 있습니다. 가능한 많은 확장이 가능하도록 추상 클래스가 많이 있습니다. 이 중 두 개는 하나의 이벤트를 모니터하도록 지정된 모니터와 이벤트 발생시 호출 할 함수 포인터를 래핑하는 콜백입니다. 콜백에 필요한 데이터를 보내려고 할 때 문제가 발생합니다. 전송 될 데이터는 서브 클래스 특정 (함수 서명에 따라 다름)이되어 서브 클래 싱 된 모니터에 저장됩니다. 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; 
}; 

일체의 의견이/제안 부탁드립니다. 감사!

답변

1

내가 올바르게 이해했다면이 데이터는 콜백 생성자에게 제공되어야합니다. 에서 파생 된 Callback1Callback2이 있다고 가정합니다.

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

이 특정 데이터는 다음 Excecute_Callback()에 사용됩니다 그래서 코드는 다음과 같다 할 수있다.

+0

이 문제는 모든 프레임에 대한 참조가 콜백이 아니라면 기본적으로 모든 프레임을 업데이트해야한다는 것입니다. 나는 그것이 얼마나 좋은지 잘 모르겠습니다. – Pat

+0

@Pat :이 경우에는 'Excecute_Callback()'으로 전달되어야합니다. 그렇지 않으면 Callback이이 데이터를 요청할 수 있어야합니다 –

관련 문제