1 | |
templates, STL10.10.2013, 12:11. Показов 2728. Ответов 43
Метки нет (Все метки)
ПЕРВОЕ средства обобщенного программирования в С++ (templates)
ВТОРОЕ библиотека STL, контейнеры и алгоритмамы STL в чем разница первого и второго? спасибо.
0
|
10.10.2013, 12:11 | |
Ответы с готовыми решениями:
43
Variadic templates Variadic Templates Variadic templates Variadic templates |
XRuZzz
|
10.10.2013, 23:14
templates, STL
#21
|
Не по теме: если кто понял о чем говорил AnyOne697 пожалуйста переведите :D я честно прочитал его посты, но смысл почему не надо использовать шаблоны не понял.
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
10.10.2013, 23:20 | 22 |
Могу с полной уверенностью сказать: переход от чистого ОО к симбиозу ОО и обобщенного программирования дал мне просто огромный левел-ап. Я смог нормально читать и вникать в код буста. Это просто неиссякаемый кладезь полезной информации. Сравнимо с тем, что я всю жизнь сидел дома, а потом внезапно вышел на улицу - новые горизонты, новые и почти неограниченные возможности.
Как пафосно я завернул В общем я скромно призываю AnyOne697 реализовать какую-нибудь библиотеку буста без призыва шаблонов и показать, насколько увеличилось удобство использования и производительность.
0
|
Каратель
|
|
10.10.2013, 23:30 | 24 |
а зачем нам ещё один objective-c ?
Добавлено через 1 минуту как я понял то товарищ AnyOne697 предлагает Не по теме: совпадение с Шариковым случайно:D
1
|
Ушел с форума
|
|
11.10.2013, 00:48 | 26 |
И как в такой list вставить экземпляр типа int ? Например, put(123) не работает.
А указатель как вставить ? Завернуть его в структуру и унаследовать структуру от Object ? Вообще, это не опечатка, что Object передается по значению ? Если не опечатка, тогда как вообще выполняется получение реального типа ? Ок, допустим это опечатка и Object передается по указателю/ссылке. И сразу же встает вопрос управления временем жизни объекта. В общем, этот пример неубедителен. Простой std::list проще, нагляднее и скорее всего еще и эффективнее, в основном за счет использования шаблонов.
1
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
11.10.2013, 00:53 | 27 |
Это как в Яве (если без generics) - нужен враппер (Integer), а потом касты при извлечении из колекции...
0
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
|||||||||||
11.10.2013, 01:21 | 28 | ||||||||||
[quote="Убежденный;5166658"]И как в такой list вставить экземпляр типа int ? Например, put(123) не работает.[quote]
Легко.
Алсо, иногда, когда скорость (ну или эллегантность кода, что в общем-то было в приоритете) очень и очень критична, делали такое:
Вообще, мы хотели ещё попробовать добавить немного рефлексии, но как-то слабо получалось. Не удобно очень. Или макросы страшные появлялсиь, или какие-то списки приходилось создавать. Но с ней всё было бы много круче. Ну я смотрю, что иницировал здесь неплохую дискуссию. Я читал код буста. И честно - потом долго отходил. Да, там интересно реализованы некоторые вещи. Но при этом понимаешь, что нужно слишком круто владеть таким инструментом, как Си++. Да и ногу лишний раз прострелить проще простого. В общем, я люблю крайности. Смешивать ООП с обобщённым программированием, как товарищ ct0r предложил - мерзость по сути. Придерживаясь одной идеи нет конфликтов идей, как это часто происходит в Си++. Смотря в какой области. Если в непосредственном использовании, то скорее больше минусов, чем плюсов. Производительность только падает. Если же в разработки, то она как по маслу. Разделение заявления / реализации - на ура. Убогих темплейтов - минимум. Затем, что это не Objective C. ЕМНИП, это вообще не то. Да, он забавный, но всё же немного не то. Не совсем так. Суперпредок нужен в основном только для того, чтобы избавиться от шаблонов. По крайне менее, в рамках этой темы. И начиналось именно с этого. Вообще, я тут распинаюсь, а зачем мне это?.. Я же написал, что я прекрасно понимаю мощь темплейтов. Но не нужным мне они, ваши темплейты. Лучше бы доработали мультипоточность или добавили бы нормальные умные указатели (без использования темплейтов - с ними они уже очень давно были). Или добавили бы минимальную поддержку графики (необязательную). Да, снова получается Java. Но Си++ интересен тем, что всегда есть выбор. И это круто. Этим он крут. Из-за этого я не могу полностью с него слезть. Добавлено через 10 минут Если не считать незначительные потери на virtual-функции, то можно. Если применить джедайскую магию, тоже можно. Вообще всё можно. Как-то одномерно. Давайте хотя бы плоско: X: O, Y: O. То есть X is O, Y is O. Но что есть X и Y?..
0
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
|
11.10.2013, 01:38 | 30 |
Горький опыт обоснован. Как показывает практика производительность действительно возрастает, так как мы имеем доступ к неплохим "ручным" оптимизациям (так как знаем, что оптимизировать). Конечно, пример с целочисленным немного надуман. Но в общем и целом. Тем более это удобно, когда внезапно возникает многопоточность.
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
11.10.2013, 01:41 | 32 |
Какие еще виртуальные функции? Какая еще "джедайская магия"?
Например, нужно уложить несколько миллионов комплексных чисел в контейнер и не потерять производительность при их обработке. C++ это легко позволяет сделать с помощью шаблонов (complex<T> и vector<T>) без какой-либо потери производительности вроде кучи аллокаций в heap, лишней косвенности и т.п. Все данные будут лежать одним куском в памяти и обрабатываться максимально эффективно, при этом все будет в объектах с удобным интерфейсом. Чтобы добиться подобной производительности в Java придется полностью выбросить все абстракции и работать напрямую с массивом из double или float, где под каждое комплексное число будет отводиться два double/float. Причем даже ArrayList нельзя будет использовать для double/float из-за boxing. Не позволяют механизмы абстракции в Java получать эффективный код, слишком они там простенькие, даже в C# куда лучше будут.
1
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
|||||||||||
11.10.2013, 01:59 | 33 | ||||||||||
Такие.
И кстати, лично мне кажется это более удобным, чем шаблоны. Особенно при использовании. Как будно пишешь на выразительном скриптовом языке без кучи звёздочек и знаков меньше-больше. Добавлено через 5 минут Алсо, совсем забыл. Здесь получается интересная штука - можно в один лист запихать объекты разного типа. Но, как я говорил, не хватает рефлексии.
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
11.10.2013, 02:03 | 34 |
Почему захардкодили double внутри Complex? Нужна поддержка как минимум еще и float!
И уже видно, что copy-paste - это ваш метод, под каждую специализацию ручной copy-paste. Очень элегантно и эффективно. Получается, что нужно этим методом сделать ComplexDouble, ComplexFloat, ComplexDoubleList, ComplexFloatList, такой у вас подход?
0
|
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
|
|
11.10.2013, 02:04 | 35 |
а в Qt как реализованы Qcontainers?
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
11.10.2013, 02:04 | 36 |
Рядом лежала вилка, но мы ели руками так как не шли на поводу орудия дьявола.
Вы все перевернули с ног на голову. Буст позволяет не писать собственные велосипеды и оберегает от ошибок, шаблоны позволяют сделать общий код и таки сократить разбухание кода, а не наоборот. Вы же просто впихнули с хедеров в сипипишки код помноженный на кол-во типов, являющимися ранее параметрами шаблона. Возможно, только для вас. Отныне и всегда буду есть ложкой, чтобы не вызвать конфликт инструментов. Все-таки признали, что пример неудачен, а ничего стоящего так и не предложили. Вывод только на конце как будто аксиома доказана. Где баг? не нужно! То бишь без комментариев и алгебры булевых функций? Потому что у него не получилось их использовать и решено было сделать все наперекосяк. Зато хедеры маленькие и время компиляции меньше. Мы ведь пишем программы чтобы компилировать.
2
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
|
11.10.2013, 07:47 | 38 |
Окей. Кажется меня здесь начинают... неправильно понимать. Подозреваю это было с самого начало.
Я не категорически против шаблонов. Я понимаю насколько мощный инструмент. Просто они меня раздражают. Мне они не нравяться, но это не значит, что я их не использую. Конечно использую, но не так активно, как это делают stl'и и бусты. Да мы переписали библиотеку. Но работа с числами интуитивна - что за бредовый ComplexFloat? А ComplexInteger? Что это за вырождение. double уже покрывает максимально возможное количество значений. Мы же не на микроконтроллеры пишем, что бы на float'ах экономить. Успокойтесь.
0
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
|
11.10.2013, 08:15 | 39 |
При выводе 3d графики до сих пор эффективнее с float работать (меньше данных в GPU пересылать, и с float GPU намного быстрее работают пока). А, например, считать физику можно в double на CPU. Так что не нужно тут про микроконтроллеры. Вообще уже понятно, что на эффективность обобщенного кода вам наплевать (все подряд наследуем от Object и аллоцируем в куче). А когда вдруг нужна эффективность, то начинаете вручную инстанцировать шаблоны методом copy-paste.
0
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
|
11.10.2013, 08:50 | 40 |
3D-графика немного другая тема. Во-первых, ни о какой 3D-графики у нас не шло и речи. Во-вторых, если экономить, то лучше использовать оптимизации на уровне драйвера, а не экономии на пересылках double. Более того, float по производительности почти такой в современных картах и CPU, тогда как точность, пусть и выше, но не избавляет от погрешностей округления, систем исчисления, разницы в реализациях (и соответственно - точности, скорости) и подобного. В суперточных вычислениях выгоднее использовать собственные структуры. Да и кто вообще вздумает использовать generic complex на GPU?.. Лучше туда масивами попарно пихать. И ведь нормально, ничего страшного.
Да и вообще, может уже пора закончить?.. Бессмысленный спор, ИМХО.
0
|
11.10.2013, 08:50 | |
11.10.2013, 08:50 | |
Помогаю со студенческими работами здесь
40
Variadic templates Variardic templates C++11::templates::compilation failure Templates внутри класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |