|
|
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
Скажите, пожалуйста, что есть плохого в использовании шаблонов, а то встретил товарища кричащего: Шаблоны отстой. Никак не аргументирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 02:39 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
скомпилированный код увеличивается :-) а так вроде нормально, полезная фишка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 06:30 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
ага а я встречал человека который то же самое говорил об ООП и при этом тоже никак не аргументировал. Таким людям надо говорить что они придурки, а лучше сразу бить в голову. Мое мнение таково, что все нужно использовать по назначению. Тоесть не пытаться для реализовать решение квадратного уравнения с помощью ООП или описывать каждый класс с помощью шаблонов, а потом из шаблон использовать как один единственный класс... нет делать так конечно можно, но это будет так же не эффективно как копать ямки под посадку земляники эксковатором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:16 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
(ого какие метафоры) Я видел человека, который осуждал STL и ООП причём очень аргументированно. И я с ним согласен. Хотя доказывать ничё не буду. И сам пользуюсь ООП и STL. Вобщем, если не решать критичние* задачи, то шаблоны - классная штука и надо использовать. Тоже с ООП. А вот для MFC - круг решаемых не_критичных задач уже. Там есть дурные навороты. *-Realtime, к примеру. Можно так общаться с вектором, что скажется на производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 11:44 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
CEMb Вобщем, если не решать критичние* задачи, то шаблоны - классная штука и надо использовать. *-Realtime, к примеру. Можно так общаться с вектором, что скажется на производительности. Шаблоны как раз предназначены для решения критичных ко времени задач, потому как код получаемый компилятором за счет встройки inline функций и статического связывания сравнимы по эффективности с ручным кодированием. Так что ля-ля не надо. Другой вопрос для встраиваемых систем объем кода может быть непомерно велик, но и это дело времени - технология "железа" развивается очень быстро. Другая сторона эффективности - алгоритм. Если алгоритм дурной, то здесь никакая технология не спасет - это важно понимать, а не делать столько пространные обобщения, связанные с шаблонами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 12:18 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
авторТак что ля-ля не надо Надо :) Как на счёт динамического выделения памяти? К примеру в такой задаче: В вектор постоянно дописывается и удаляется n объектов. Если на каждой операции будет делаться выделение/освобождение памяти - лучше руками выделить один раз и использовать. Возможно я и не прав. Я точно не знаю механизм работы STL. Если кто знает - скажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 16:28 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
2 alex_k скомпилированный код увеличивается :-) а так вроде нормально, полезная фишка. Экспериментировал с VC7.1. (Помнишь, "чудеса оптимизации"?) Так вот, этот компилятор очень даже нехило, при включенном Global Optimization склеивает одинаковые с т.з. процессора процедуры и ф-ии. т.е. предположим, что MyType1 и MyType2 - несвязанные типы, так вот при использовании одного и того же шаблона для MyType1* и MyType2* будут сгенерированы одинаковые участки кода, которые оптимизатор склеит. 2 Семь К примеру в такой задаче: В вектор постоянно дописывается и удаляется n объектов. Если на каждой операции будет делаться выделение/освобождение памяти - лучше руками выделить один раз и использовать. угу, ты прав, можно разрабатывать свои менеджеры памяти и использовать их в собственных аллокаторах в STL. Именно для этого аллокаторы и выделенны там в отдельную сущность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 16:44 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
Насчет вектора. Если известно, что в системе будет присутствовать где-то n объектов, то std::vector::reserve как раз и предназначен для резервирования памяти под n объектов. Причем выделенная память остается "сырой" (не инициализированной). Для конроля за переаллокацией памяти вектора служат два селектора std::vector::size() (количество элементов в векторе) и std::vector::capacity() (емкость контейнера - то есть количество элементов, которые может в себя вместить контейнер): Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вот, примерно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 16:46 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков Шаблоны как раз предназначены для решения критичных ко времени задач, Полностью поддерживаю! Интересно - кто такую фигню и где вычитал, что использование templates отрицательно сказывается на быстродействии...? alex_k скомпилированный код увеличивается :-) Хочу высказать по поводу этого недоразумения Шаблоны НЕ увеличивают размер кода в пределах модуля ! и точка :) Т.е. не было бы шаблонов - вы бы испоьзовали cut&paste - так что они просто автоматизируют эту работу - у вас все равно нет друго выхода! Чтобы не флудить - если кто-то не верит - пусть приводит примеры. К сожалению шаблоны не разделяемы между модулями. т.е. нельзя объявить шаблон в модуле template.dll, а затем его использовать из ваших програм - код шаблона будет дублироваться между ними - так что когда говорят об увеличении размера - имеют в виду именно это. К счасть грядущие шаблоны в .Net лишены этого недостатка :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 17:59 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
2 vdimas v>т.е. предположим, что MyType1 и MyType2 - несвязанные типы, так вот при использовании одного и того же шаблона для MyType1* и MyType2* будут сгенерированы одинаковые участки кода, которые оптимизатор склеит. касательно шаблонов, это не компилятор такой умный - это частичная специализация шаблонов, которая как раз и стала поддерживаться, с версии 7.1 насчет аллокаторов - аллокатор маленьких объектов из Loki вот это весчь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:00 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
ну, вообще говоря, переписав проект с заменой char* на STD::string получил заметное на глаз увеличение скорости и уменьшение исполняемого кода на 5 процентов. к чему бы это? правда я еще UP/low не реализовал, но врядли это как-то скажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:16 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
2 funikovyuri f>Хочу высказать по поводу этого недоразумения Шаблоны НЕ увеличивают размер кода в пределах модуля! и точка :) ... Чтобы не флудить - если кто-то не верит - пусть приводит примеры. непонятно: Что значит не увеличивают код в пределах модуля? В С++ - что есть модуль? ну давай пофлудим: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. сколько копий функции max будет создано 1 или 2? f>К сожалению шаблоны не разделяемы между модулями. т.е. нельзя объявить шаблон в модуле template.dl Ты вообще, преставляешь себе разницу м/у бинарным (*.dll) и исходным текстом? f>К счасть грядущие шаблоны в .Net лишены этого недостатка :) Я сам не разбирался с НЕТовскими дженериками, но помоему даже из названия понятно, что это не те шаблоны, коими они являются в C++. ИМХО PS Есть зачечательная книга, буквально до мелочей объясняет шаблоны - C++ Templates: The Complete Guide By David Vandevoorde, Nicolai M. Josuttis. Прочтите не пожалеете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:24 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
Shkurenko Alexander Под модулем я имел в виду исполняемый бинарный файл Что значит не увеличивают код в пределах модуля? Это означает что не увеличивает по сравнению с кодом в котором вместо шаблонов было решено использовать какой-либо другой подход Ты вообще, преставляешь себе разницу м/у бинарным (*.dll) и исходным текстом? Нет, откуда - это ты у нас такой умный Я сам не разбирался с НЕТовскими дженериками, но помоему даже из названия понятно, что это не те шаблоны, коими они являются в C++. А ты разберись (если хочешь я тебе книжки посоветую :)) - а вчастности ты узнаешь что шаблоны - это реализация в C++ generic programming - каторое так называлась всегда - задолго до появления шаблонов в самом C++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 18:35 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
2 funikovyuri SA>>Что значит не увеличивают код в пределах модуля? f>Это означает что не увеличивает по сравнению с кодом в котором вместо шаблонов было решено использовать какой-либо другой подход А ты посмотри, примерчик который я тебе написал, может точку после твего утверждения ставить рано? ;) SA>>Я сам не разбирался с НЕТовскими дженериками, но помоему даже из SA>>названия понятно, что это не те шаблоны, коими они являются в C++. f>А ты разберись (если хочешь я тебе книжки посоветую :)) - а вчастности ты f>узнаешь что шаблоны - это реализация в C++ generic programming - каторое f>так называлась всегда - задолго до появления шаблонов в самом C++ Про generic programming и metaprogramming я кое-что читал, но от книжек и полезных ссылок не откажусь. За это спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2004, 20:15 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
Так, раньше я считал, что для каждого нового параметра шаблона генерится новый код. Теперь вкрадываются смутные сомнения :) 2 funikovyuri А можно и мне немножко про generic programming. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 08:09 |
|
||
|
Шаблоны
|
|||
|---|---|---|---|
|
#18+
Девочки, не ссорьтесь. ;)) CEMbЯ видел человека, который осуждал STL и ООП причём очень аргументированно. И я с ним согласен. Хотя доказывать ничё не буду. И сам пользуюсь ООП и STL. каждая штуковина была придумана для решения своего множества задач. Так что все является полезным если использовать по назначению. скажем ООП скорее придумали для проектирования чем программирования. Попробуй спроектировать (ну и соответственно реализовать) достаточно сложную систему без ООП .... И вобще все дружно и быстро вокидали в форум свои полезные ссылки !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2004, 14:16 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32390745&tid=2035475]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 355ms |

| 0 / 0 |
