在抽象类之间传递数据
Passing Data Between abstract classes
我正在寻找最好的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;
};
任何和所有的意见/建议都是赞赏的。谢谢!
如果我正确理解了您的话,这个数据应该提供给回调构造函数。假设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()
中使用。
相关文章:
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 线程之间的实时数据共享
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- 在C++事务之间存储大量字符数据的有效方法
- 如何在进程之间共享大量数据而不重复?(国际刑罚委员会)
- 简单使用 std::atomic 在两个线程之间共享数据
- 在 EXE/DLL 之间传递数据
- 由 std::shared_ptr 向量指向的数据之间的线程同步
- 在压缩和未压缩数据之间切换
- 尝试从每个预期数据之间有多个空间的文件中读取和存储数据
- 如何在指定数据之间将数据从一个向量获取到另一个向量
- 使用Isringstream和struct/vector在给定的数据之间建立连接
- 结构数据D = {0}和结构数据D = {}之间是否存在任何区别
- openMP 的目标数据和目标数据之间的区别?
- 代码是否被视为可移植可执行文件格式中的初始化数据,初始化数据和单元化数据之间的确切区别是什么
- libpcap 数据包结果与使用 C++ 的 BSD 套接字接收数据之间的差异