LINUX.ORG.RU

интересное в Qt


0

0

раскопал тут давеча в Qt:

template <typename T>
Q_INLINE_TEMPLATES T qt_cast(const QObject *object)
{ return (T)qt_inheritedBy( ((T)0)->staticMetaObject(), object ); }

Кто-нибудь может объяснить как такое возможно :) ? Я имею ввиду

((T)0)->staticMetaObject()

?

-- Keiko

anonymous

А какие проблемы ? Главное чтобы staticMetaObject был невиртуальным + не менял бы внутренние поля класса в котором он определен.

BottleHunter
()

Легко возможно.

Вызывают статическую функцию. Важен тип указателя (в данном случае T), а не то, на что он реально указывает (на 0).

Можно было написать T::staticMetaObject(), но здесь у разных версий компиляторов могут быть свои пожелания на тему ключевого слова typename.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.