objectCast Боковое литье - PullRequest
       9

objectCast Боковое литье

1 голос
/ 18 сентября 2010

Я пытаюсь заменить все dynamicCasts в моем коде на objectCast QT. Но я наткнулся на небольшую загадку. Вот иерархия моих объектов:

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 Ответ

3 голосов
/ 18 сентября 2010

На мой взгляд, у вас есть три варианта:

  1. Вы связываете два интерфейса друг с другом, помещая их в иерархию наследования, позволяя одному наследовать другой. Это позволит вам разыгрывать от одного к другому в одном направлении, но также будет клонить и шутить, если между ними нет реальной реальности.
  2. Вы создаете суперинтерфейс, от которого наследуются два других, и используете его, если хотите, в качестве общей базы. Это позволит вам привести объект двумя способами, используя суперинтерфейс, но также создаст несущественную абстракцию.
  3. Вы приводите свой производный объект к ISize, делаете то, что хотите, а затем приводите ту же самую производную ссылку к IAbility. Следовательно: Derived -> ISize, Derived -> IAbility.

Я бы выбрал вариант 3 просто потому, что это наименее принудительное решение с точки зрения абстракции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...