如何解决如何进行具有多重继承的转换
|| 我的课程结构如下: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一起使用。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。