gpt4 book ai didi

c++ - 将父类的 const 引用转换为派生的子对象

转载 作者:行者123 更新时间:2023-11-28 04:03:46 25 4
gpt4 key购买 nike

我的程序中有很多事件都继承自 Entity .我正在努力弄清楚如何将其转换回其中一个 child ,例如 MouseMovedEvent . Entity被传递为 const Entity& e我需要一些方法来访问 MouseMovedEvent 中的 getter。我在想我可以投 EntityMouseMovedEvent但我已经尝试了 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 异常,(这是一件好事,否则它只会导致您的程序开始执行完全未定义的“随机”事物)

同样值得注意的是,您不应该这样做。您应该始终与具有与之交互所需的方法的类进行交互。如果您需要转换为 child ,几乎可以肯定您以一种尴尬的方式设计了它,并且有一种更简洁的设计。既然你已经澄清你正在使用事件,那么解决方案通常类似于 Event->dispatch(),它将自身作为 MouseMovedEvent 触发到你的 MouseMovedEventHandler

关于c++ - 将父类的 const 引用转换为派生的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079641/

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