templates, STL10.10.2013, 12:11. Показов 3575. Ответов 43
Метки нет (Все метки)
ПЕРВОЕ средства обобщенного программирования в С++ (templates)
ВТОРОЕ библиотека STL, контейнеры и алгоритмамы STL в чем разница первого и второго? спасибо.
0
|
|
| 10.10.2013, 12:11 | |
|
Ответы с готовыми решениями:
43
Variadic Templates Variadic templates |
| 10.10.2013, 23:14 | |
|
Не по теме: если кто понял о чем говорил AnyOne697 пожалуйста переведите :D я честно прочитал его посты, но смысл почему не надо использовать шаблоны не понял.
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 10.10.2013, 23:20 | |
|
Могу с полной уверенностью сказать: переход от чистого ОО к симбиозу ОО и обобщенного программирования дал мне просто огромный левел-ап. Я смог нормально читать и вникать в код буста. Это просто неиссякаемый кладезь полезной информации. Сравнимо с тем, что я всю жизнь сидел дома, а потом внезапно вышел на улицу - новые горизонты, новые и почти неограниченные возможности.
Как пафосно я завернул ![]() В общем я скромно призываю AnyOne697 реализовать какую-нибудь библиотеку буста без призыва шаблонов и показать, насколько увеличилось удобство использования и производительность.
0
|
|
|
Каратель
|
|||
| 10.10.2013, 23:30 | |||
|
Добавлено через 1 минуту Не по теме: совпадение с Шариковым случайно:D
1
|
|||
|
Ушел с форума
|
||
| 11.10.2013, 00:48 | ||
|
А указатель как вставить ? Завернуть его в структуру и унаследовать структуру от Object ? Вообще, это не опечатка, что Object передается по значению ? Если не опечатка, тогда как вообще выполняется получение реального типа ? Ок, допустим это опечатка и Object передается по указателю/ссылке. И сразу же встает вопрос управления временем жизни объекта. В общем, этот пример неубедителен. Простой std::list проще, нагляднее и скорее всего еще и эффективнее, в основном за счет использования шаблонов.
1
|
||
|
What a waste!
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
|
||
| 11.10.2013, 00:53 | ||
|
0
|
||
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
|||||||||||||||||||
| 11.10.2013, 01:21 | |||||||||||||||||||
|
[quote="Убежденный;5166658"]И как в такой list вставить экземпляр типа int ? Например, put(123) не работает.[quote]
Легко.
Алсо, иногда, когда скорость (ну или эллегантность кода, что в общем-то было в приоритете) очень и очень критична, делали такое:
Вообще, мы хотели ещё попробовать добавить немного рефлексии, но как-то слабо получалось. Не удобно очень. Или макросы страшные появлялсиь, или какие-то списки приходилось создавать. Но с ней всё было бы много круче. В общем, я люблю крайности. Смешивать ООП с обобщённым программированием, как товарищ ct0r предложил - мерзость по сути. Придерживаясь одной идеи нет конфликтов идей, как это часто происходит в Си++. Если же в разработки, то она как по маслу. Разделение заявления / реализации - на ура. Убогих темплейтов - минимум. Вообще, я тут распинаюсь, а зачем мне это?.. Я же написал, что я прекрасно понимаю мощь темплейтов. Но не нужным мне они, ваши темплейты. Лучше бы доработали мультипоточность или добавили бы нормальные умные указатели (без использования темплейтов - с ними они уже очень давно были). Или добавили бы минимальную поддержку графики (необязательную). Да, снова получается Java. Но Си++ интересен тем, что всегда есть выбор. И это круто. Этим он крут. Из-за этого я не могу полностью с него слезть. Добавлено через 10 минут
0
|
|||||||||||||||||||
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
||
| 11.10.2013, 01:38 | ||
|
0
|
||
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
||
| 11.10.2013, 01:41 | ||
|
Например, нужно уложить несколько миллионов комплексных чисел в контейнер и не потерять производительность при их обработке. 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 | ||||||||||||
И кстати, лично мне кажется это более удобным, чем шаблоны. Особенно при использовании. Как будно пишешь на выразительном скриптовом языке без кучи звёздочек и знаков меньше-больше. Добавлено через 5 минут Алсо, совсем забыл. Здесь получается интересная штука - можно в один лист запихать объекты разного типа. Но, как я говорил, не хватает рефлексии.
0
|
||||||||||||
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
||
| 11.10.2013, 02:03 | ||
|
И уже видно, что copy-paste - это ваш метод, под каждую специализацию ручной copy-paste. Очень элегантно и эффективно. Получается, что нужно этим методом сделать ComplexDouble, ComplexFloat, ComplexDoubleList, ComplexFloatList, такой у вас подход?
0
|
||
|
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
|
|
| 11.10.2013, 02:04 | |
|
а в Qt как реализованы Qcontainers?
0
|
|
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||||||
| 11.10.2013, 02:04 | |||||||||||
|
не нужно!
2
|
|||||||||||
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
||
| 11.10.2013, 07:47 | ||
|
Окей. Кажется меня здесь начинают... неправильно понимать. Подозреваю это было с самого начало.
Я не категорически против шаблонов. Я понимаю насколько мощный инструмент. Просто они меня раздражают. Мне они не нравяться, но это не значит, что я их не использую. Конечно использую, но не так активно, как это делают stl'и и бусты. Да мы переписали библиотеку. Но работа с числами интуитивна - что за бредовый ComplexFloat? А ComplexInteger? Что это за вырождение. double уже покрывает максимально возможное количество значений. Мы же не на микроконтроллеры пишем, что бы на float'ах экономить. Успокойтесь.
0
|
||
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
||
| 11.10.2013, 08:15 | ||
|
0
|
||
|
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
|
||
| 11.10.2013, 08:50 | ||
|
Да и вообще, может уже пора закончить?.. Бессмысленный спор, ИМХО.
0
|
||
| 11.10.2013, 08:50 | |
|
Помогаю со студенческими работами здесь
40
Variadic templates
Templates внутри класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча
Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове.
Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|