我的程序中有很多事件均从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中。

09-06 04:52