【发布时间】:2016-09-28 02:24:14
【问题描述】:
我有两个班级,Base 和 Derived。我有一个存储Derived* 指针列表的容器。
有一个信号/槽机制,它在 Base 对象被销毁时发出一个信号,此时我们在 ~Base 析构函数中,因此 RTTI 不能用于将 Base* 转换为 Derived*(这是使用 Qt,但问题不是 Qt 特定的)
该信号连接到管理指针容器的插槽。你可能已经猜到了,我想检查其对象被销毁的Base*指针是否对应存储在容器内的Derived*指针,如果是,则将其从容器中移除。
我知道有许多替代设计,例如不使用QObject::destroyed() 信号,或者存储QObject* 列表而不是Derived*。但出于许多实际原因,我想使用那个。
这意味着,我想将基指针转换为派生指针,不是为了取消引用,而是为了取消跟踪指针,并且我希望它被定义为无论子类树是什么(包括多重继承、虚函数.. .).
我可以为此使用 static_cast 吗?
谢谢!
【问题讨论】:
-
糟糕 - 感谢您的关注
-
嗯,您可以使用
static_cast,但您必须确保类型正确。 -
@DavidHaim :正如我所说,我知道还有其他可能的设计,但这里的问题是具体的。我无法在此处修改基类(即 QObject Qt 基类)
-
@πάνταῥεῖ:你能解释一下吗? static_cast 的潜在问题正是我所缺少的。
-
@DavidHaim :然后我必须重写 Qt。基类,信号槽机制,都是框架的核心特性。
标签: c++ pointers casting derived-class rtti