我的程序中有很多事件都继承自Entity
。我正在努力弄清楚如何将其转换回诸如MouseMovedEvent
之类的子级。 Entity
作为
const Entity& e
,我需要一些方法来访问MouseMovedEvent中的getter。我当时以为可以将Entity
投射到MouseMovedEvent
,但是我尝试了6种不同的效果方式。
最坏的情况是,我正在考虑将Event的参数设置为const Event* e
,然后进行
const MouseMovedEvent* childEvent = static_cast<const MouseMovedEvent*>(e);
这会起作用,但我担心抛出指针会变得有些混乱。我希望使const引用方法起作用(或者甚至只是引用,因为我不需要它们是恒定的),但是我不确定如何实现此目的。
对于完成父事件对象的传递有任何帮助或指导。
答案 0 :(得分:1)
要回答直接的问题:您可以像投射指针一样完全投射引用。
const MouseMovedEvent& childEvent = static_cast<const MouseMovedEvent&>(e);
但是,当从父辈投射到孩子时,您几乎总是希望使用dynamic_cast
。请注意,如果强制转换错误,dynamic_cast
将引发std::bad_cast
异常(这是一件好事,因为否则会导致您的程序开始执行完全未定义的“随机”事情)>
还值得注意的是,您不应该这样做。您应该始终与具有与您进行交互的方法的类进行交互。如果您需要对孩子投掷,几乎可以肯定的是您以尴尬的方式进行了设计,并且设计更加简洁。既然您已经确定要使用事件,那么解决方案通常类似于Event->dispatch()
,它会以MouseMovedEvent
的身份发射到MouseMovedEventHandler
中。