Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
У меня эта потребонсть со временем только падала. Сейчас применяю их скорее эпизодически. Если в цифрах — то несколько раз в год
В шаблонах обычно нет необходимости, если только это не компоненты с явным
прицелом на вариации используемых типов и повторное использование.
Например, трудно представить компонент для работы с сетевым соединением,
параметризированный чем-то другим, нежели Connection или Socket — примение
шаблонов было бы в данном случае избыточным.
С другой стороны, с помощью шаблонов можно достичь определенной гибкости,
параметризируя интерфейсы или политики использования, причем данные техники
дают некоторый выигрыш в производительности по сравнению с обычными полиморфными,
так как разрешаются на стадии компиляции, а не выполнения. Это тоже важно.
Если данный подход уместно применить на уровне всего приложения или его отдельных
слоев, то это хороший показатель того, что к решению нужно подойти обобщенно.
Я считаю, что проектировать иерархии вообще не стоит. Получается обычно коряво и
обходится дорого во всех отношениях — один класс тянет за собой весь фреймворк.
Простые компоненты, которые можно быстро настроить и использовать изолированно, гораздо ценней.
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
Примерно настолько часто, насколько пишешь библиотеки.
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
Очень редко, скорее исключение из правил. Обычно все что хочется сделать на шаблонах уже гденить качественно реализованно. Исключение это интеграция обобщенной библиотеки.
В реальных проектах всё реже и реже есть необходимость в обобщённом
программировании, по многим объективным причинам. Да и вообще, в некотором
роде, академическое программирование уже утратило свою ценность... Я как то
еще лет 10 назад говорил: Всё что нужно для решения реальных задач
(инстументарий, библиотеки и т.д.) — уже всё давно написано, и все
велосипеды уже давно изобретены, и не один!
Также могу с большой уверенностью сказать, что более 40% возможностей
библиотеки Boost врядли ктото использовал, просто не нужно... Для меня это
только всего лишь какой то полигон для изучения нового, но в реальности мало
применимо. (Хотя конечно же библиотека замечательная и достойная).
Другое дело, что те проекты которые мне приходилось реализовывать в 90-ых
годах, было бы очень здорово отрефакторить и переделать с использованием
того же Boost и ряда современных технологий, но врядли это ктото позволит
себе, работает же, и ладно...
Posted via RSDN NNTP Server 2.1 beta
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Ладно, на основе boost-а, хоть и страшен он как смертный грех, строят вполне мощные библиотеки, хотя бы cgal, а нужные для работы аналоги всегда существовали до всяких бустов, все вопросы применения того или иного инструмента лежат чисто в практической плоскости, что удобно, то и используют. Если код не под армы и dsp пишется, то в реальном проекте трудно себе представить такое игнорирование шаблонов.
А дело в том, что в программерском ремесле за последнее десятилетие ничего
собственно прорывного и не произошло, за исключением Web и Mobile
технологий... Всё остальное либо по протоптанной тропе, либо доработка и
модификации уже написанного и придуманного... Фундамент был уже давно
заложен и окна прорублены! Сугубо моё мнение.
Posted via RSDN NNTP Server 2.1 beta
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
У нас, в основном, для оптимизации используется. Пишется с++ код для общего случая, потом на интринсиках\асме пишется для каждого конкретного случая реализация.
Здравствуйте, peterbes, Вы писали:
P>Здравствуйте, Smooky, Вы писали:
P>Ладно, на основе boost-а, хоть и страшен он как смертный грех, строят вполне мощные библиотеки, хотя бы cgal, а нужные для работы аналоги всегда существовали до всяких бустов, все вопросы применения того или иного инструмента лежат чисто в практической плоскости, что удобно, то и используют. Если код не под армы и dsp пишется, то в реальном проекте трудно себе представить такое игнорирование шаблонов.
Cgal dlib -- показательный пример как код в стиле "я хочу быть александреску" может порождать бешеное число граблей при использовании.
Здравствуйте, denisko, Вы писали:
D>Cgal dlib -- показательный пример как код в стиле "я хочу быть александреску" может порождать бешеное число граблей при использовании.
Либа была интересна, но я ее (честно) не использовал, у меня не было таких задач, потому интересно ваше мнение. Мне был интересен алгоритм морфинга 3D объектов в 3DMax, а в cgal он реализован. Вопрос без наездов. Собственно, что там кривого?
Здравствуйте, Smooky, Вы писали:
S>А дело в том, что в программерском ремесле за последнее десятилетие ничего S>собственно прорывного и не произошло, за исключением Web и Mobile S>технологий... Всё остальное либо по протоптанной тропе, либо доработка и S>модификации уже написанного и придуманного... Фундамент был уже давно S>заложен и окна прорублены! Сугубо моё мнение.
Здравствуйте, peterbes, Вы писали:
P>Здравствуйте, denisko, Вы писали:
D>>Cgal dlib -- показательный пример как код в стиле "я хочу быть александреску" может порождать бешеное число граблей при использовании.
P>Либа была интересна, но я ее (честно) не использовал, у меня не было таких задач, потому интересно ваше мнение. Мне был интересен алгоритм морфинга 3D объектов в 3DMax, а в cgal он реализован. Вопрос без наездов. Собственно, что там кривого?
Куча проверок, которые отключаются через одно место или не отключаются вообще в случае малейшей ошибки какого-либо программиста в проекте.
P>>Либа была интересна, но я ее (честно) не использовал, у меня не было таких задач, потому интересно ваше мнение. Мне был интересен алгоритм морфинга 3D объектов в 3DMax, а в cgal он реализован. Вопрос без наездов. Собственно, что там кривого? D>Куча проверок, которые отключаются через одно место или не отключаются вообще в случае малейшей ошибки какого-либо программиста в проекте.
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
Свои классы, в основном вспомогательные (типа traits) — постоянно.
Иерархии — крайне редко, практически никогда, если не считать иерархиями метафункции, конечно.
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
Вопрос состоит из двух частей:
а) насколько часто используются шаблоны;
б) насколько часто используются шаблонные классы (точнее шаблоны классов).
Мои ответы на эти вопросы отличаются: если шаблонные классы я пишу иногда от случая к случаю, то шаблоны функций довольно часто, в основном для того чтобы:
1) сделать обобщенную функцию параметром;
2) сделать пару итераторов параметрами.
> Такой общий вопрос — насколько часто в реальных проектах используется > обобщенное программирование (шаблоны) .
Очень от проекта зависит.
Может быть от "не использовать вообще шаблоны"
через "использовать STL коллекции только для реализации"
до "безумный шаблонизированный С++ в стиле Александреску и boost-а"
STL, boost конечно используется > повсеместно — а вот насколько реально необходимо создавать свои > шаблонные классы — не на уровне простых классов — а целых иерархий ?
Иерархии классов и обобщённое программирование -- вещи почти друг
другу противоречащие.
Здравствуйте, Smooky, Вы писали:
S>В реальных проектах всё реже и реже есть необходимость в обобщённом S>программировании, по многим объективным причинам. Да и вообще, в некотором S>роде, академическое программирование уже утратило свою ценность...
Head Ache wrote:
> полиморфный объект не может быть параметром шаблона? > или полиморфный объект не может использовать шаблоны в реализации?
Да просто как правило, действительно, полиморфизм времени компиляции
(шаблоны) и полиморфизм времени выполнения (механизмы виртуализации) редко
сочетают! Но конечно же, бывают и исключения!
П.С. Последнее время редко встречал какие та супер витиеватые иерархии
классов... разве что только в каких та крупных библиотеках (Qt например)...
Posted via RSDN NNTP Server 2.1 beta
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Здравствуйте, agronom25, Вы писали:
A>Такой общий вопрос — насколько часто в реальных проектах используется обобщенное программирование (шаблоны) . STL, boost конечно используется повсеместно — а вот насколько реально необходимо создавать свои шаблонные классы — не на уровне простых классов — а целых иерархий ?
В задачах моделирования физ. процессов — постоянно. Строю систему на стратегиях в стиле Александреску — очень помогает проводить сравнительный анализ вычислительных алгоритмов.
В боевых системах — сделал один раз платформу, теперь только простые классы от traits наследую, вставляю и все работает Боевые системы (3) примерно схожи по архитектуре, поэтому так просто получилось.