如何进行具有多重继承的转换

|| 我的课程结构如下:
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);
我的方法有潜在的缺陷吗?
已邀请:
您可以按照演示的方式进行操作,但这不是必需的。下面应该可以正常工作。
IMethodHelper* myIHelper = dynamic_cast<IMethodHelper*>(someObject);
IMethodHelper * myIHelper = dynamic_cast<IMethodHelper *>(someObject);
如果类型是多态的,则使用
dynamic_cast
进行交叉强制转换是合法的。 5.2.7 / 8代码段: 运行时检查在逻辑上执行 如下所示:—如果是 v,v指向(引用)的对象 指向(指)公共基类 T对象的子对象,如果仅 类型T的一个对象是从 指向(引用)的子对象 通过v,结果是一个指针( 左值)指向该T对象。
只是为了补充答案,还有
Q_INTERFACES
Q_DECLARE_INTERFACE
允许使用qobject_cast而不是dynamic_cast进行强制转换。该文档主要为构建插件而广告,但是它们可以在任何类型的项目中使用。 它们在创建\“ services \”时特别有用(例如,此类是否实现服务接口
com.example.IFileService/1.0
?)当然,如果需要,它们可以与RTTI一起使用。

要回复问题请先登录注册