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