powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны
17 сообщений из 17, страница 1 из 1
Шаблоны
    #32388474
biomen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, пожалуйста, что есть плохого в использовании
шаблонов, а то встретил товарища кричащего: Шаблоны отстой.
Никак не аргументирует.
...
Рейтинг: 0 / 0
Шаблоны
    #32388493
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скомпилированный код увеличивается :-)
а так вроде нормально, полезная фишка.
...
Рейтинг: 0 / 0
Шаблоны
    #32388741
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага а я встречал человека который то же самое говорил об ООП и при этом тоже никак не аргументировал.
Таким людям надо говорить что они придурки, а лучше сразу бить в голову.

Мое мнение таково, что все нужно использовать по назначению. Тоесть не пытаться для реализовать решение квадратного уравнения с помощью ООП или описывать каждый класс с помощью шаблонов, а потом из шаблон использовать как один единственный класс... нет делать так конечно можно, но это будет так же не эффективно как копать ямки под посадку земляники эксковатором.
...
Рейтинг: 0 / 0
Шаблоны
    #32388802
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(ого какие метафоры)

Я видел человека, который осуждал STL и ООП причём очень аргументированно.
И я с ним согласен. Хотя доказывать ничё не буду. И сам пользуюсь ООП и STL.

Вобщем, если не решать критичние* задачи, то шаблоны - классная штука и надо использовать. Тоже с ООП.
А вот для MFC - круг решаемых не_критичных задач уже. Там есть дурные навороты.

*-Realtime, к примеру. Можно так общаться с вектором, что скажется на производительности.
...
Рейтинг: 0 / 0
Шаблоны
    #32388857
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb Вобщем, если не решать критичние* задачи, то шаблоны - классная штука и надо использовать.

*-Realtime, к примеру. Можно так общаться с вектором, что скажется на производительности.


Шаблоны как раз предназначены для решения критичных ко времени задач, потому как код получаемый компилятором за счет встройки inline функций и статического связывания сравнимы по эффективности с ручным кодированием. Так что ля-ля не надо. Другой вопрос для встраиваемых систем объем кода может быть непомерно велик, но и это дело времени - технология "железа" развивается очень быстро.

Другая сторона эффективности - алгоритм. Если алгоритм дурной, то здесь никакая технология не спасет - это важно понимать, а не делать столько пространные обобщения, связанные с шаблонами.
...
Рейтинг: 0 / 0
Шаблоны
    #32389430
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТак что ля-ля не надо
Надо :)
Как на счёт динамического выделения памяти?

К примеру в такой задаче:
В вектор постоянно дописывается и удаляется n объектов. Если на каждой операции будет делаться выделение/освобождение памяти - лучше руками выделить один раз и использовать.
Возможно я и не прав. Я точно не знаю механизм работы STL. Если кто знает - скажите.
...
Рейтинг: 0 / 0
Шаблоны
    #32389459
Фотография vdimas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 alex_k

скомпилированный код увеличивается :-)
а так вроде нормально, полезная фишка.


Экспериментировал с VC7.1. (Помнишь, "чудеса оптимизации"?)
Так вот, этот компилятор очень даже нехило, при включенном Global Optimization склеивает одинаковые с т.з. процессора процедуры и ф-ии.

т.е. предположим, что MyType1 и MyType2 - несвязанные типы, так вот при использовании одного и того же шаблона для MyType1* и MyType2* будут сгенерированы одинаковые участки кода, которые оптимизатор склеит.


2 Семь

К примеру в такой задаче:
В вектор постоянно дописывается и удаляется n объектов. Если на каждой операции будет делаться выделение/освобождение памяти - лучше руками выделить один раз и использовать.


угу, ты прав, можно разрабатывать свои менеджеры памяти и использовать их в собственных аллокаторах в STL. Именно для этого аллокаторы и выделенны там в отдельную сущность.
...
Рейтинг: 0 / 0
Шаблоны
    #32389467
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет вектора. Если известно, что в системе будет присутствовать где-то n объектов, то std::vector::reserve как раз и предназначен для резервирования памяти под n объектов. Причем выделенная память остается "сырой" (не инициализированной). Для конроля за переаллокацией памяти вектора служат два селектора std::vector::size() (количество элементов в векторе) и std::vector::capacity() (емкость контейнера - то есть количество элементов, которые может в себя вместить контейнер):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if (v.size() == v.capacity() )
{
   // следующее добавление элемента в вектор гарантировано приведет к перераспределению памяти
} else
{
   // можем спать спокойно - перераспределения не произойдет
}


Вот, примерно так.
...
Рейтинг: 0 / 0
Шаблоны
    #32389620
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков

Шаблоны как раз предназначены для решения критичных ко времени задач,

Полностью поддерживаю! Интересно - кто такую фигню и где вычитал, что использование templates отрицательно сказывается на быстродействии...?

alex_k

скомпилированный код увеличивается :-)

Хочу высказать по поводу этого недоразумения
Шаблоны НЕ увеличивают размер кода в пределах модуля ! и точка :)
Т.е. не было бы шаблонов - вы бы испоьзовали cut&paste - так что они просто автоматизируют эту работу - у вас все равно нет друго выхода! Чтобы не флудить - если кто-то не верит - пусть приводит примеры.

К сожалению шаблоны не разделяемы между модулями. т.е. нельзя объявить шаблон в модуле template.dll, а затем его использовать из ваших програм - код шаблона будет дублироваться между ними - так что когда говорят об увеличении размера - имеют в виду именно это.

К счасть грядущие шаблоны в .Net лишены этого недостатка :)
...
Рейтинг: 0 / 0
Шаблоны
    #32389623
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 vdimas
v>т.е. предположим, что MyType1 и MyType2 - несвязанные типы, так вот при использовании одного и того же шаблона для MyType1* и MyType2* будут сгенерированы одинаковые участки кода, которые оптимизатор склеит.

касательно шаблонов, это не компилятор такой умный - это частичная специализация шаблонов, которая как раз и стала поддерживаться, с версии 7.1

насчет аллокаторов - аллокатор маленьких объектов из Loki вот это весчь
...
Рейтинг: 0 / 0
Шаблоны
    #32389643
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, вообще говоря, переписав проект с заменой char* на STD::string получил заметное на глаз увеличение скорости и уменьшение исполняемого кода на 5 процентов.
к чему бы это?

правда я еще UP/low не реализовал, но врядли это как-то скажется.
...
Рейтинг: 0 / 0
Шаблоны
    #32389655
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri

f>Хочу высказать по поводу этого недоразумения
Шаблоны НЕ увеличивают размер кода в пределах модуля! и точка :) ...
Чтобы не флудить - если кто-то не верит - пусть приводит примеры.

непонятно:
Что значит не увеличивают код в пределах модуля? В С++ - что есть модуль?

ну давай пофлудим:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
template <typename T> 
inline T const& max (T const& a, T const& b) 
{ 
    return a < b ? b : a; 
}

void f()
{
    ::max( "123 ",  "456 ");
    ::max( "1234 ",  "1234 ");
}


сколько копий функции max будет создано 1 или 2?

f>К сожалению шаблоны не разделяемы между модулями. т.е. нельзя объявить шаблон в модуле template.dl

Ты вообще, преставляешь себе разницу м/у бинарным (*.dll) и исходным текстом?

f>К счасть грядущие шаблоны в .Net лишены этого недостатка :)

Я сам не разбирался с НЕТовскими дженериками, но помоему даже из названия понятно, что это не те шаблоны, коими они являются в C++. ИМХО

PS Есть зачечательная книга, буквально до мелочей объясняет шаблоны -
C++ Templates: The Complete Guide By David Vandevoorde, Nicolai M. Josuttis.
Прочтите не пожалеете.
...
Рейтинг: 0 / 0
Шаблоны
    #32389669
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shkurenko Alexander

Под модулем я имел в виду исполняемый бинарный файл

Что значит не увеличивают код в пределах модуля?

Это означает что не увеличивает по сравнению с кодом в котором вместо шаблонов было решено использовать какой-либо другой подход

Ты вообще, преставляешь себе разницу м/у бинарным (*.dll) и исходным текстом?

Нет, откуда - это ты у нас такой умный

Я сам не разбирался с НЕТовскими дженериками, но помоему даже из названия понятно, что это не те шаблоны, коими они являются в C++.

А ты разберись (если хочешь я тебе книжки посоветую :)) - а вчастности ты узнаешь что шаблоны - это реализация в C++ generic programming - каторое так называлась всегда - задолго до появления шаблонов в самом C++
...
Рейтинг: 0 / 0
Шаблоны
    #32389785
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 funikovyuri

SA>>Что значит не увеличивают код в пределах модуля?

f>Это означает что не увеличивает по сравнению с кодом в котором вместо шаблонов было решено использовать какой-либо другой подход


А ты посмотри, примерчик который я тебе написал, может точку после твего утверждения ставить рано? ;)

SA>>Я сам не разбирался с НЕТовскими дженериками, но помоему даже из
SA>>названия понятно, что это не те шаблоны, коими они являются в C++.

f>А ты разберись (если хочешь я тебе книжки посоветую :)) - а вчастности ты
f>узнаешь что шаблоны - это реализация в C++ generic programming - каторое
f>так называлась всегда - задолго до появления шаблонов в самом C++


Про generic programming и metaprogramming я кое-что читал, но от книжек и полезных ссылок не откажусь. За это спасибо.
...
Рейтинг: 0 / 0
Шаблоны
    #32389971
biomen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, раньше я считал, что для каждого нового параметра
шаблона генерится новый код. Теперь вкрадываются смутные
сомнения :)

2 funikovyuri

А можно и мне немножко про generic programming.
...
Рейтинг: 0 / 0
Шаблоны
    #32390745
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Девочки, не ссорьтесь. ;))

CEMbЯ видел человека, который осуждал STL и ООП причём очень аргументированно.
И я с ним согласен. Хотя доказывать ничё не буду. И сам пользуюсь ООП и STL.


каждая штуковина была придумана для решения своего множества задач. Так что все является полезным если использовать по назначению. скажем ООП скорее придумали для проектирования чем программирования. Попробуй спроектировать (ну и соответственно реализовать) достаточно сложную систему без ООП ....

И вобще все дружно и быстро вокидали в форум свои полезные ссылки !!!
...
Рейтинг: 0 / 0
Шаблоны
    #32391197
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это точно.
Всё что не придумается - для чего-то нужно, полезно.

А что если не полезно - то атавизм. И со временем само отомрёт.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Шаблоны
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]