Russian Qt Forum
Ноябрь 23, 2024, 00:54
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Разное
>
Говорилка
>
"Не-темплейтность" Qt
Страниц:
1
[
2
]
3
4
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: "Не-темплейтность" Qt (Прочитано 26277 раз)
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #15 :
Март 16, 2015, 10:46 »
Два шаблона - потому что неправильно сравнивать double через ==, поскольку статистически два double с большой долей вероятности будут не равны, но отличатся могут на бесконечно малое значение, которое может считаться приемлемым. А значит математика для int и для double будет разная, а значит будет шаблон, и его специализация для чисел с плавающей точкой, т.е. как минимум 2 шаблона.
Если тезис про то что использовать == с double нежелательно звучит для вас бредом - могу пояснить на примере.
Записан
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #16 :
Март 16, 2015, 11:03 »
Цитата: Igors от Март 16, 2015, 10:12
А зачем джуниору что-то ломать?
Если есть 2 способа сделать нечто, лично я предпочту тот что будет проще в понимании. Видимо ребята в Qt думают так же. Хотя нет, это не правда, ребята не использует шаблоны в Qt просто потому что как минимум некоторое время назад (а возможно и сейчас) вынуждены были работать на платформах с не самыми современными компиляторами. И кстати это же один из доводов против использования исключений.
Цитата: Igors от Март 16, 2015, 10:12
Да, и тот же Qt вовсе не стесняется "трудностей с пониманием", см напр во что выливается Q_DECLARE_METATYPE
Да, просто существуют вещи которые невозможно/сложно/не разумно сделать проще (по разным причинам).
«
Последнее редактирование: Март 16, 2015, 11:15 от RSATom
»
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: "Не-темплейтность" Qt
«
Ответ #17 :
Март 16, 2015, 11:07 »
Цитата: RSATom от Март 16, 2015, 09:46
Какой оператор правильно использовать для операций над целочисленными типами, и не совсем правильно выполнять для чисел с плавающей точкой?
Что значит "не совсем" правильно? Для какой аппаратной платформы? Для какого компилятора?
Цитата: RSATom от Март 16, 2015, 09:46
Каюсь, как это зачастую бывает на собеседованиях, вопрос был недостаточно точен:
Какой
встроенный
оператор...
Что такое "встроенный" оператор? Во что встроенный?
Такого рода вопросы - отличная тема для беседы с потенциальным новичком, но отнюдь не повод ожидать от него "правильных" ответов.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: "Не-темплейтность" Qt
«
Ответ #18 :
Март 16, 2015, 11:11 »
Цитата: Igors от Март 16, 2015, 09:22
Да тот же самый что сейчас (если это сейчас работает). Вариант-минимум
Код
C++ (Qt)
typedef
TPoint
<
int
>
QPoint
;
typedef
TPoint
<
qreal
>
QPointF
;
И пусть все остальное как сейчас. Найдется немало ф-ций где удобнее template аргумент вместо дублирования и/или копирования туда-сюда
Сейчас такой проблемы нет.
Далее, как уже верно упомянули, operator== работает по-разному для целочисленных и вещественных точек (точное равенство или с точностью эпсилон). В вашем случае это выльется в еще большее количество кода
Цитата: Igors от Март 16, 2015, 09:25
Если возникает такое страстное желание сделать bool точку (что это?), а тем более void
, то вот пусть автор и "специализирует", какой смысл он в это вкладывал - хз
Ну это разведение шаблонов позволяет делать бул точки. Нет шаблонов - нет проблемы.
Вообще, вы подходите к вопросу с точки зрения типичного с++ кодера - надо всё зашаблонить не думая о последствиях. В данном примере шаблоны не нужны. А, например, QAtomicInt имеет шаблонную базу QAtomicInteger<T>. Кстати, начиная с 5.3 он публичный.
Записан
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #19 :
Март 16, 2015, 11:13 »
Цитата: xokc от Март 16, 2015, 11:07
Что значит "не совсем" правильно? Для какой аппаратной платформы? Для какого компилятора?
Платформа и компилятор значения не имеет.
Для примера, скажите, равны ли два числа 1.999999998 и 1.999999991 ?
Цитата: xokc от Март 16, 2015, 11:07
Что такое "встроенный" оператор? Во что встроенный?
встроенный в моем понимании это не перегруженный.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: "Не-темплейтность" Qt
«
Ответ #20 :
Март 16, 2015, 11:14 »
Цитата: RSATom от Март 16, 2015, 09:46
Какой
встроенный
оператор...
define "встроенный". Мембер что ли? У QPointF нет мембер operator ==
Если built-in то такого тоже не существует для точек.
Записан
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #21 :
Март 16, 2015, 11:19 »
речь шла о сравнении примитивных типов через ==
P.S. похоже я все же плохо умею выражать свои мысли...
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: "Не-темплейтность" Qt
«
Ответ #22 :
Март 16, 2015, 11:29 »
Цитата: RSATom от Март 16, 2015, 11:19
речь шла о сравнении примитивных типов через ==
P.S. похоже я все же плохо умею выражать свои мысли...
А, тьфу, это я читать не умею:) Был сконфужен что это в теме про точки) Про флоат\дабл вопрос абсолютно стандартный.
Записан
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #23 :
Март 16, 2015, 11:41 »
Цитата: Авварон от Март 16, 2015, 11:29
А, тьфу, это я читать не умею:) Был сконфужен что это в теме про точки) Про флоат\дабл вопрос абсолютно стандартный.
Уфф, отлегло...
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: "Не-темплейтность" Qt
«
Ответ #24 :
Март 16, 2015, 11:48 »
Цитата: RSATom от Март 16, 2015, 11:13
Платформа и компилятор значения не имеет.
К сожалению, Вы нам не подходите. Мы ищем специалиста по разработке приложений для микроконтроллеров/ПЛИС/GPU, где вообще нет целочисленных регистров и машинных команд для манипуляции целочисленными данными, а вся целочисленная арифметика реализована как частный случай операций над числами с плавающей точкой.
Цитата: RSATom от Март 16, 2015, 11:13
Для примера, скажите, равны ли два числа 1.999999998 и 1.999999991 ?
Для меня, как для инженера-математика, безусловно, не равны. Я, кончено, подозреваю, что Вы имеете ввиду случай побититового сравнения представлений этих чисел в 32 битных регистрах х86 совместимых процессоров... Ну так и задайте вопрос правильно, типа
"Какова точность кодирования мантиссы для формата данных single-pecision чисел с плавающей точкой в стандарте IEEE 754-1985 и как эта особенности сказывается на результате сравнения float переменных в различных реализациях С компиляторов"?
Для информации: на "равенство" этих чисел с точки зрения компилятора может влиять даже опции, с которыми производится компиляция.
Так что к сожалению, и тут Вы нам не подходите. Кроме того, у Вас присутствует симптомы известной серди разработчиков болезни "Floating point paranoia". Для своевременного принятия мер по её излечению настоятельно рекомендуется к прочтению эта статья
http://habrahabr.ru/post/112953/
.
Ну и позволю её кусочек тут процитировать: "Сейчас арифметика с плавающей запятой почти совершенна. Практически всегда наивный подход сработает, и программа, не учитывающая все ее особенности, выдаст правильный результат, а описанные подводные камни касаются только экзотических случаев".
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: "Не-темплейтность" Qt
«
Ответ #25 :
Март 16, 2015, 11:58 »
Цитата: RSATom от Март 16, 2015, 10:46
Если тезис про то что использовать == с double нежелательно звучит для вас бредом - могу пояснить на примере.
Приведите, с удовольствием послушаю. Добавлю что разница не только в этом - напр деление int на ноль выбрасывает исключение, а для флотов нет.
Так что же получается?
Есть разница в типах, там кое-какие вещи обрабатываются по-разному, и значит (вот поэтому) темплейты здесь неуместны!
Это весьма слабый аргумент даже для такого "нелюбителя" темплейтов как я. Специализировать всего неск ф-ций - просто мелочь по сравнению с дубляжом десятков и десятков членов класса, 99% которых идеально совпадают. Да, и вот понадобится TPoint <float> (напр с OpenGL это вероятно), и что бум делать?
И еще позвольте спросить (
RSATom
, не Вас личнo, а всех участвующих). Ну а почему любое решение Qt считается правильным и идеальным? Почему так охотно отыскиваются аргументы "в одну сторону" а "в другую" не рассматриваются вообще?
Записан
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #26 :
Март 16, 2015, 12:06 »
Цитата: xokc от Март 16, 2015, 11:48
К сожалению, Вы нам не подходите. Мы ищем специалиста по разработке приложений для микроконтроллеров/ПЛИС/GPU, где вообще нет целочисленных регистров и машинных команд для манипуляции целочисленными данными, а вся целочисленная арифметика реализована как частный случай операций над числами с плавающей точкой.
Подозреваю что и на равенство числа с плавающей точкой не сравниваются без допусков в этом случае? И кстати про ПЛИС у меня в резюме ни слова, странное что вы меня вообще на собеседование позвали...
Цитата: xokc от Март 16, 2015, 11:48
Цитата: RSATom от Март 16, 2015, 11:13
Для примера, скажите, равны ли два числа 1.999999998 и 1.999999991 ?
Для меня, как для инженера-математика, безусловно, не равны. Я, кончено, подозреваю, что Вы имеете ввиду случай побититового сравнения представлений этих чисел в 32 битных регистрах х86 совместимых процессоров...
Нет, все гораздо тривиальней. Если я вам скажи что эти 2 числа это координаты пикселя на экране? В этом мы смело можем утверждать что эти числа должны трактоваться как эквиалентные.
Следующий вопрос: а эквивалентны ли 1.9 и 1.8?
Ответ: Иногда да, а иногда нет.
Да - если мы все еще оперируем координатами пикселя на экране.
Нет - если мы оперируем координатами пикселя на экране но например для SVG анимации.
Это я все к тому, что в случае с числами с плавающей точкой, размер допуска при сравнении может быть разный в зависимости от конкретного применения.
Записан
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #27 :
Март 16, 2015, 12:09 »
Цитата: Igors от Март 16, 2015, 11:58
И еще позвольте спросить (
RSATom
, не Вас личнo, а всех участвующих). Ну а почему любое решение Qt считается правильным и идеальным? Почему так охотно отыскиваются аргументы "в одну сторону" а "в другую" не рассматриваются вообще?
Абсолютно не пытался утверждать что какое либо из решений правильное а другое нет, все в этом мире относительно. Единственное что я хотел сказать "серебряной пули" не существует. И если выигрываем в одном, проигрываем в другом.
Записан
Bepec
Гость
Re: "Не-темплейтность" Qt
«
Ответ #28 :
Март 16, 2015, 12:14 »
to Igors:
Не все решения Qt правильные и идеальные. Те же View не идеальны и, я бы сказал, поверхностны.
А аргументы находятся, "потому что оно работает" ©.
Решения простые, низкий порог для понимания механизмов работы, возможность внесения исправлений. Оно работало, работает и будет работать. Мне лично нравится такой подход, пусть он и теряет в возможностях.
PS помнится я редактировал чужой проект, в котором шаблон на шаблоне сидел, лежал и кукарекал - у меня мозги чуть не спеклись
Записан
RSATom
Гость
Re: "Не-темплейтность" Qt
«
Ответ #29 :
Март 16, 2015, 12:17 »
Цитата: Bepec от Март 16, 2015, 12:14
PS помнится я редактировал чужой проект, в котором шаблон на шаблоне сидел, лежал и кукарекал - у меня мозги чуть не спеклись
Оказывается есть даже такая болезнь: "Укушенный Александреску"
Записан
Страниц:
1
[
2
]
3
4
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...