objectCast Sideways cast

时间:2010-09-18 14:04:56

标签: c++ qt casting qobject

我正在尝试用QT的objectCast替换我代码中的所有dynamicCasts。但我遇到了一些障碍。这是我的对象的层次结构:

class ABase : public QObject

class IAbility; // Registered as Qt Interface
class ISize; // Registered as Qt Interface

class Derived : public ABase, public IAbility, public ISize; // Uses Q_INTERFACES

使用objectCast我可以将Derived转换为ISize或IAbility。但是,在我的代码的一个点上,我想执行以下转换:Derived-> ISize-> IAbility。最后一次演员是我收到错误的地方。由于IAbility以任何方式与ISize无关,因此可能会导致问题。在这一点上我可以做一个动态演员,但我宁愿不这样做。

1 个答案:

答案 0 :(得分:3)

我认为你有三种选择:

  1. 通过将两个接口放在继承层次结构中,让一个接口继承另一个接口,将它们相互关联起来。这将允许你从一个方向转向一个方向,但如果两者之间没有真正的实际情况,那么它也会变得笨拙而且不稳定。
  2. 您创建了一个超级接口,其他两个接口继承,并将其用作常见的转换接地,如果愿意的话。这将允许您使用超级界面以两种方式强制转换对象,但也会创建一个非抽象的抽象。
  3. 您将Derived对象强制转换为ISize,执行您想要的操作,然后将相同的派生引用强制转换为IAbility。因此:派生 - > ISize,Derived - > IAbility。
  4. 我会选择3,因为它是最不强制的解决方案,抽象方式。