Каким образом qobject_cast work?

Я только что нашел следующий код в Qt и немного запутался в том, что здесь происходит.

Особенно в отношении того, что reinterpret_cast (0) есть?

template <class T>
inline T qobject_cast(const QObject *object)
{
    // this will cause a compilation error if T is not const
    register T ptr = static_cast<T>(object);
    Q_UNUSED(ptr);

#if !defined(QT_NO_MEMBER_TEMPLATES) && !defined(QT_NO_QOBJECT_CHECK)
    reinterpret_cast<T>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<T>(const_cast<QObject *>(object)));
#endif
    return static_cast<T>(const_cast<QObject *>(reinterpret_cast<T>(0)->staticMetaObject.cast(const_cast<QObject *>(object))));
}

Кто-нибудь может объяснить?

39
задан troyane 5 January 2016 в 12:36
поделиться