gpt4 book ai didi

c++ - 类型转换为抽象类?

转载 作者:太空宇宙 更新时间:2023-11-03 10:33:48 25 4
gpt4 key购买 nike

我正在编写一个基于事件的消息传递系统,以在我的游戏项目中的各个单例管理器之间使用。每个管理器类型(InputManager、AudioManager 等)都派生自一个管理器基类,并且还继承自一个 EventHandler 类以促进消息处理,如下所示:

class Manager
{ ... }

class EventHandler
{ ...
virtual void onEvent(Event& e) =0;
...
}

class InputManager : public Manager, public EventHandler
{ ...
virtual void InputManager::onEvent(Event& e);
{ ... }
}

在其他地方,我有一个 EventManager,它跟踪所有 EventHandler 并用于向多个接收者广播事件。

class EventManager
{...
addHandlerToGroup(EventHandler& eh);
{ ... }
...
}

当然,当我初始化我的所有单例管理器时,我想在创建它们时将它们添加到 EventManager 的列表中。我的问题是,每当我尝试将我的管理器转换为事件处理程序时,MVC++ 都会在编译时提示(并且当我用波浪线编码时)。我认为它会按如下方式工作:

int main()
{ ...
EventManager* eventM = new EventManager();

...

InputManager* inputM = new InputManager();
eventM->addHandlerToGroup(dynamic_cast<EventHandler>(inputM));

}

然而,编译器告诉我“不允许强制转换为抽象类”。我的印象是你可以......毕竟,如果不来回传递对象并在解释它们与基类的接近程度方面具有一定的灵 active ,多态性对你没有多大好处。我当前的解决方法如下所示:

int main()
{ ...
EventManager* eventM = new EventManager();
EventHandler* temp;

...

InputManager* inputM = new InputManager();
temp = inputM;
eventM->addHandlerToGroup(*inputM);

}

据我所知,这在概念上与我要实现的目标相同,只是更冗长且更不直观。就多态性类型转换的工作原理而言,我完全不了解吗?我哪里错了?

最佳答案

EventManager 中,将方法 addHandlerToGroup 声明为

void addHandlerToGroup(EventHandler* handler);

然后,只需删除类型转换。将指针(在示例 inputM 中)按原样传递给 addHandler 方法,您应该没问题:)

关于c++ - 类型转换为抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8622258/

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