如何进行具有多重继承的转换
||
我的课程结构如下:
class MethodHelper : public QObject, public IMethodHelper {
public:
// Stuff
};
现在,我得到一个指向该对象的指针:
QObject* someObject = getMethodHelper();
在这里,我非常确定someObject
是MethodHelper的一种。我想以某种方式将其投射到IMethodHelper。我应该怎么做?
我目前的想法就像QObject -> MethodHelper -> IMethodHelper
,例如:
QObject* someObject = getMethodHelper();
MethodHelper* myHelper = qobject_cast<MethodHelper*>(someObject);
IMethodHelper* myIHelper = dynamic_cast<IMethodHelper*>(myHelper);
我的方法有潜在的缺陷吗?
没有找到相关结果
已邀请:
3 个回复
犯痪桂涛杭
芦歉竭皑
如果类型是多态的,则使用
进行交叉强制转换是合法的。 5.2.7 / 8代码段: 运行时检查在逻辑上执行 如下所示:—如果是 v,v指向(引用)的对象 指向(指)公共基类 T对象的子对象,如果仅 类型T的一个对象是从 指向(引用)的子对象 通过v,结果是一个指针( 左值)指向该T对象。
才脊烽馈低
和
允许使用qobject_cast而不是dynamic_cast进行强制转换。该文档主要为构建插件而广告,但是它们可以在任何类型的项目中使用。 它们在创建\“ services \”时特别有用(例如,此类是否实现服务接口
?)当然,如果需要,它们可以与RTTI一起使用。