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

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

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: "Не-темплейтность" Qt  (Прочитано 24546 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Март 15, 2015, 16:13 »

Добрый день

Навеяно соседней темой. Не избегает ли Qt темплейтов где только можно? Ну хотя бы

QPoint - QPointF
QRect - QRectF

Казалось бы, ну явный, махровый template, ведь отличие только в типе данных. Но нет, в Qt это не template. Задавая этот вопрос раньше, получал только ответы типа std::борзость, напр
Цитировать
да ничего там не напрашивается
Но я все-таки спрошу еще раз  Улыбающийся

Спасибо
Записан
Bepec
Гость
« Ответ #1 : Март 15, 2015, 16:23 »

Задавался такой вопрос троллям довольно давно - почему бы не навалить темплейтов, увязать всё это бустом и проапгрейдить до нужного уровня.
Ответ - Qt должен быть простым и понятным. Их цель - не красота кода, а простота и универсальность.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #2 : Март 16, 2015, 00:04 »

бустом

красота кода

wat?

Казалось бы, ну явный, махровый template, ведь отличие только в типе данных. Но нет, в Qt это не template. Задавая этот вопрос раньше, получал только ответы типа std::борзость, напр

Окей, мы получим Point<int>, Point<long>, Point<bool>, Point<void> ну и так далее. Всё это надо как-то между собой увязать (логично, что можно складывать разные точки и получать точку большей размерности). Оно нам надо?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Март 16, 2015, 08:27 »

Окей, мы получим Point<int>, Point<long>, Point<bool>, Point<void> ну и так далее. Всё это надо как-то между собой увязать (логично, что можно складывать разные точки и получать точку большей размерности). Оно нам надо?
Не понял откуда взялась проблема какой-то увязки.

wat?
Думается "шо?" звучало бы гораздо лучше  Улыбающийся
Записан
Bepec
Гость
« Ответ #4 : Март 16, 2015, 08:45 »

Не "Шо?", а вопрос - почему вы не пользуетесь бустом, звучал. Ведь если замешать буст, темплейты и Qt родится такая уникальная мешанина Веселый

Но тролли сказали что хотят Qt, а не мешанину Улыбающийся
Записан
RSATom
Гость
« Ответ #5 : Март 16, 2015, 08:59 »

Потенциальный вопрос для собеседований:
Какой оператор правильно использовать для операций над целочисленными типами, и не совсем правильно выполнять для чисел с плавающей точкой?
Ответ: operator ==
Вопрос к ответу: Почему?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #6 : Март 16, 2015, 09:10 »

Не понял откуда взялась проблема какой-то увязки.

Код:
Point<int> p1(10, 10);
Point<qlonglong> p2(20, 20);
auto p3 = p1 + p2; // какой тип у p3?
Point<bool> p4; // можно ли так объявить?
Point<void *> p5; // а так?
Point<void> p6; // а вот так?
auto p7 = p1 + p5; // какой тип?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #7 : Март 16, 2015, 09:11 »

Потенциальный вопрос для собеседований:
Какой оператор правильно использовать для операций над целочисленными типами, и не совсем правильно выполнять для чисел с плавающей точкой?
Ответ: operator ==
Вопрос к ответу: Почему?


К сожалению, вы нам не подходите.
Код:
Q_DECL_CONSTEXPR inline bool operator==(const QPointF &p1, const QPointF &p2)
{
    return qFuzzyIsNull(p1.xp - p2.xp) && qFuzzyIsNull(p1.yp - p2.yp);
}
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Март 16, 2015, 09:12 »

Потенциальный вопрос для собеседований:
Какой оператор правильно использовать для операций над целочисленными типами, и не совсем правильно выполнять для чисел с плавающей точкой?
Ответ: operator ==
Вопрос к ответу: Почему?
Но позвольте, для этого есть template<> (специализация шаблонов?), которую некоторые здесь с упоением рисуют при первой же возможности.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #9 : Март 16, 2015, 09:13 »

Но позвольте, для этого есть template<> (специализация шаблонов?), которую некоторые здесь с упоением рисуют при первой же возможности.

Ну то есть нам надо специализировать void, T *, возможно, bool. То есть уже 4 класса. А было 2.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Март 16, 2015, 09:22 »

Код:
auto p3 = p1 + p2; // какой тип у p3?
Да тот же самый что сейчас (если это сейчас работает). Вариант-минимум
Код
C++ (Qt)
typedef TPoint <int> QPoint;
typedef TPoint <qreal> QPointF;
И пусть все остальное как сейчас. Найдется немало ф-ций где удобнее template аргумент вместо дублирования и/или копирования туда-сюда
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Март 16, 2015, 09:25 »

Ну то есть нам надо специализировать void, T *, возможно, bool. То есть уже 4 класса. А было 2.
Если возникает такое страстное желание сделать bool точку (что это?), а тем более void  Непонимающий, то вот пусть автор и "специализирует", какой смысл он в это вкладывал - хз
Записан
RSATom
Гость
« Ответ #12 : Март 16, 2015, 09:28 »

Но позвольте, для этого есть template<> (специализация шаблонов?), которую некоторые здесь с упоением рисуют при первой же возможности.
Угу, и мы получим вместо двух потенциально простых для понимания классов, 2 несколько более сложных шаблона, да еще один их которых специализирован по типу. Сколько джуниоров сломает себе мозги на этом ровном месте?
« Последнее редактирование: Март 16, 2015, 09:30 от RSATom » Записан
RSATom
Гость
« Ответ #13 : Март 16, 2015, 09:46 »

К сожалению, вы нам не подходите.

Каюсь, как это зачастую бывает на собеседованиях, вопрос был недостаточно точен:
Какой встроенный оператор...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Март 16, 2015, 10:12 »

Угу, и мы получим вместо двух потенциально простых для понимания классов, 2 несколько более сложных шаблона, да еще один их которых специализирован по типу. Сколько джуниоров сломает себе мозги на этом ровном месте?
А зачем джуниору что-то ломать? Он может спокойно пользоваться теми же самыми QPoint и QPointF - с той лишь разницей что они будут typedef, И откуда два шаблона Непонимающий Да, и тот же Qt вовсе не стесняется "трудностей с пониманием",  см напр во что выливается Q_DECLARE_METATYPE
Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


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