Здравствуйте.
У меня есть иерархия
C++ (Qt)
class IInterface <- class ISubInterface
и, соответственно, реализатор
C++ (Qt)
class Realize : public ISubInterface
При классической RTTI объект Realize должен корректно приводиться как к одному, так и к другому интерфейсу
C++ (Qt)
Realize* r = new Realize;
ISubInterface* si = dynamic_cast<ISubInterface>(r) // ok
IInterface* si = dynamic_cast<IInterface>(r) // ok
Нативная реализация Qt предполагает использование макроса
C++ (Qt)
Q_INTERFACES(ISubInterface)
в классе-реализаторе.
Но в этом случае приведение работает только к указанному классу
C++ (Qt)
ISubInterface* si = qobject_cast<ISubInterface>(r) // ok
IInterface* si = qobject_cast<IInterface>(r) // false
Я пдосмотрел семплы и сделал подобно множественному наследованию, указав весь граф базовых интерфейсов
C++ (Qt)
Q_INTERFACES(Vcon::IGenericPlugin Vcon::IGraphicPlugin)
Приведение типов стало работать.
C++ (Qt)
ISubInterface* si = qobject_cast<ISubInterface>(r) // ok
IInterface* si = qobject_cast<IInterface>(r) // ok
Так как в ассистенте и сети я не нашел ничего, вопрос к гуру: это кошерное решение?