Russian Qt Forum
Ноябрь 25, 2024, 02:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTypeInfo  (Прочитано 5315 раз)
Sergeich
Гость
« : Апрель 17, 2008, 12:50 »

Наткнулся в qglobal.h на кусок кода, где определяется является ли данный тип указателем:
Код:
template <typename T> char QTypeInfoHelper(T*(*)());
void* QTypeInfoHelper(...);

template <typename T>
class QTypeInfo
{
public:
    enum {
        isPointer = (1 == sizeof(QTypeInfoHelper((T(*)())0))),
        //.........
    };
};
Нихрена не могу понять как это работает  В замешательстве Может кто просветит неразумного?
Записан
Tonal
Гость
« Ответ #1 : Апрель 17, 2008, 13:23 »

Работает так:
Если тип T поданный в QTypeInfo является указателем, то при вычислении компилятором выражения sizeof(QTypeInfoHelper((T(*)())0))) выбирается шаблонная версия QTypeInfoHelper и выражение принимает значение sizeof(char), т.е 1.
В противном случае выбирается QTypeInfoHelper с многоточием.

Техника называется SFINAE
Записан
Sergeich
Гость
« Ответ #2 : Апрель 17, 2008, 14:59 »

А что значит конструкция T(*)() ?
Записан
Tonal
Гость
« Ответ #3 : Апрель 17, 2008, 15:43 »

Указатель на функцию без параметров которая возвращает T.
Записан
Sergeich
Гость
« Ответ #4 : Апрель 17, 2008, 18:40 »

Указатель на функцию без параметров которая возвращает T.
мля, точно... торможу Улыбающийся
Записан
Sergeich
Гость
« Ответ #5 : Апрель 18, 2008, 10:03 »

Спасибо! Асилил Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.128 секунд. Запросов: 20.