У меня есть несколько классов:
class Class A { }
class Class B { }
class Class C : public QObject, public A, public B { Q_OBJECT }
class Class D : public C
{
Q_OBJECT
void somefunc() = 0;
}
class Class E : public D { Q_OBJECT } // This class iplements somefunc
В какой-то момент я создаю экземпляр E
как указатель C
:
C* pC = new E();
Затем мне нужно знаю, указывает ли pC
на D
, и я пробовал это:
D* pD = qobject_cast<D*>(pC);
В этом случае qobject_cast
возвращает nullptr
, но если это сделать, я получаю действительный указатель D
:
if ( pC->inherits("D") )
{
D* pD = static_cast<D*>(pC);
}
Должен ли qobject_cast
работать в этом случае? Если нет, используется inherits
и static_cast
безопасно?