gpt4 book ai didi

c++ - 需要帮助以避免沮丧

转载 作者:太空狗 更新时间:2023-10-29 21:50:51 25 4
gpt4 key购买 nike

我创建了一个由以下类描述的简化的事件处理程序系统

IEventType - containing string name and hashed int value of the name for fast search
IEventData - data send along with a triggered event
EventManager - containing a std::map of <int, boost::signals2< bool( boost::shared_ptr< IEventData > ) >

(对于 lua 脚本事件等还有一些其他的监听器,但我认为现在这些都无关紧要了)

实际问题是:当我派生一个 IEventData 时,假设:

class EData_WriteToConsole : IEventData
{
std::string text;
int layer;
...
}

然后我向信号注册一些成员函数:

OnWriteToConsole( boost::shared_ptr< IEventData > ){ ... }
m_EventManager->AddListener(boost::bind(&Console::OnWriteToConsole, m_Console, _1));

然后使用EventManager的TriggerEvent函数

boost::shared_ptr< EData_WriteToConsole > eventData(new EData_WriteToConsole("Text..", 1));
m_EventManager->TriggerEvent(eventData);

终于触发了我的事件:但我无法访问 EData_WriteToConsole 特定事件数据,因为 OnWriteToConsole 仅接收基类 IEventData ptr。

所以我需要将 boost::shared_ptr 指向的 IEventData 向下转换为派生类 EData_WriteToConsole。

我目前陷入困境,因为我的大脑在过去几天没有得到足够的 sleep ,我只是想不出不沮丧的解决方案。 有没有办法解决这个问题,我能以某种方式重组我的类层次结构,这样我就不需要向上转换了吗?(我考虑过创建一个 std::map,其中包含作为 eventdata 传递的数据,以便接收功能可以搜索它需要的东西,但对我来说似乎又慢又傻)请帮忙

最佳答案

您能否在 IEventData 接口(interface)中放置一个虚拟方法,例如actionEvent() 是在派生类中实现的以调用对事件进行操作所需的任何内容?

如果事件需要以几种不同的方式进行操作,它会限制你一些。

关于c++ - 需要帮助以避免沮丧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5152238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com