![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
![]()
Доброго времени!
Часто вижу "шаблоны класса" и так далее.. почитал на вики, что-то плоховато понял.. Объясните пожалуйста зачем они, и как ими пользоваться?
Спеши медленно.
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
я полистал немного гугл по запросу шаблоны класса.
ИМХО, словосочетания применяется не корректно. обычно идет речь о шаблонном классе. а не о заготовке класса(как лично у меня видится смысл сего словосочетания). тут еще может идти речь, что класс должен соответствовать определенному шаблону, как например алгоритмы в STL, им без разницы каком класс, для работы им нужны определенные методы(например begin()/end() ). Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
"Шаблонный класс" - суть конкретный продукт шаблона класса, или по другому инстанцированный класс, сконструированный по шаблону. "Шаблонный класс" является типом, построенный на основании шаблона. "Шаблон класса" типом не является. Он является описанием возможных типов. ======================= А вот что говорит об этом автор знаменитой книги: ...Присутствует некоторая путаница в отношении того, как следует именовать класс, являющийся шаблоном. -Термин "шаблон класса" (class template) означает, что класс является шаблоном. Другими словами, это - параметризированное описание семейства классов. -Термин "шаблонный класс" (template class), с другой стороны, используется: - как синоним "шаблон класса" (вот где путаница начинается(!) Примичание: _Bers). - для обозначения классов, генерированных из шаблона. - для обозначения классов с именем, которое является идентификатором шаблона. (Ц) Вандевурд, Джосаттис - Шаблоны C++ , 111страница, глава 7 "Основные термины в области шаблонов", раздел 7.1 "Шаблон класса, или шаблонный класс" От себя добавлю, что я не согласен с Джосаттисом в том, что различия в трактовках терминологии не существенны. В простых случаях может быть это и не суть важно. Но без понимания идеи шаблонов нельзя заниматься мета-программированием. Только когда человек поймёт, что шаблон класса не является типом, только тогда он сможет понять, что на самом деле шаблон - это описание будующих конструкций различных типов. Только тогда он сможет изготавливать мета-программы на шаблонах, с помощью которых можно будет уже конструировать целые архитектурные сооружения. |
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
![]()
Ребят, большое спасибо вам!
Не могли бы вы пояснить на примере? Мне так легче понять будет. Зачем шаблоны, как и где их применять.
Спеши медленно.
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Теперь напиши точно такую же функцию, только для float А теперь - точно такую же, только для double ... А завтра ещё какую нибудь. Каждый раз тебе придётся ручками писать перегрузку функции, которая по сути будет делать одно и тоже, только с разными типами аргументов. А при помощи шаблонов, можно один раз написать шаблон функции: "каким бы ни был аргумент этой функции - просто удвой его". И тогда, в такую шаблонную функцию можно будет пихать что угодно, что умеет удваиваться. И не придется больше писать никаких перегрузок. |
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
![]()
а перегрузка - это изменение параметров вызова существующей функции?
то есть можно вместо перегрузки писать шаблон класса, или как?
Спеши медленно.
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 25.11.2011
Сообщений: 12
|
![]()
_Bers
Классно объясняешь, даже я понял ![]() |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Шаблоны | Freddi Krjuger | Общие вопросы C/C++ | 6 | 14.11.2010 20:55 |
Шаблоны С++ | Secc | Помощь студентам | 4 | 27.12.2009 17:35 |
Шаблоны C++ | Viamy | Помощь студентам | 0 | 27.12.2009 16:10 |
Шаблоны, Си++ | Нataша | Помощь студентам | 1 | 11.12.2009 01:35 |
Шаблоны | bondik | Общие вопросы C/C++ | 10 | 04.05.2008 09:50 |