![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| stat007 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 521 Регистрация: 9.10.2008 Репутация: -1 Всего: -4 |
Всем привет!
Хочу изучить шаблоны, кто и что может посоветовать? Какая вообще цель шаблонов в С++? где, когда и для чего используются? ну и т.д. Вообщем поделитесь опытом в этом вопросе, непомешают примеры... |
|||
|
||||
| KaraKum |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Ну, самый популярный пример - это STL (vector, deque, list...).
Коротко говоря, шаблоны используются когда заранее неизвестно переменные каких размеров (в байтах) будут использоваться. В моём небольшом опыте не приходилось создавать шаблонные классы и, думаю, никогда не придётся - всё что требуется всегда пока находилось в STL - и почти наверняка так всегда и будет. А если шаблонные классы начинают создаваться уже НЕ для организации хранения и доступа к переменных этого типа, то это, наверняка, уже плохой стиль программирования, потому что в таких случаях почти всегда можно решить имеющуюся задачу гораздо проще. Добавлено @ 01:13 Ну и вот описание из книги: "Синтаксис шаблонов Если вы собираетесь использовать шаблоны, привыкайте к тому, что в вашей речи будет часто звучать термин параметризованный (parameterized). Шаблоны используются для создания параметризованных типов (обычно классов) и параметризованных функций. Параметризованные типы Параметризованный тип внешне представляет собой обычное объявление класса, которому предшествует магическое заклинание template <c1ass Type>, где Type — выбранное вами символическое имя (остальные элементы задаются жестко). Всюду, где символическое имя Type (или другое имя) встречается в объявлении класса оно интерпретируется как макрос, вместо которого при использовании класса подставляется конкретный тип. Класс ListNode, переписанный как параметризованный тип, выглядит следующим образом:
В теле объявления класса формальный параметр шаблона резервирует место, на которое при использовании класса подставляется фактический параметр. При этом компилятор буквально генерирует правильный, безопасный по отношению к типам код. Параметризованные функции Параметризованные функции объявляются точно так же — перед их объявлениями указывается формула template.... Синтаксис шаблона должен повторяться как при объявлении, так и при определении функции. Помните, шаблоны на самом деле являются макросами, поэтому они должны находиться в файлах .h. Если определение будет находиться в файле .срр, программа работать не будет (если только это не единственный файл .срр, в котором вызывается данная функция).
Определение генерируется компилятором при необходимости, то есть при вызове функции. На этот раз параметризовано имя функции, а не имя класса." Это сообщение отредактировал(а) KaraKum - 1.3.2009, 01:17 |
||||
|
|||||
| pan2004 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 1 Всего: 9 |
что за ? Шаблоны используются как средство параметризации типов(например в STL параметры шаблонов указывают типы хранимых в контейнерах объектов, или способ аллокации памяти). Ну и так же в качестве средства переложить часть задач на compile time.
чточто? |
||||
|
|||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
Ну а я что сказал - с таким же успехом можно передавать указатель на void и размер этого типа. |
|||
|
||||
| pan2004 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 1 Всего: 9 |
нифига. А как ты скопируешь объект, зная только его размер? Как сравнишь его с другим? Удалишь? Да никак. С POD типами это сработает, но никак не с объектами классов C++ Добавлено через 1 минуту и 6 секунд
проще не значит эффективно. |
||||
|
|||||
| KaraKum |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: 1 Всего: 1 |
||||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 1 Всего: 9 |
Еще раз: это не только изврат, с объектами такое в принципе не сработает. Всегда нужно вызывать конструктор-копировщик для копирования, и деструктор для уничтожения, да и как ты собрался побайтово сравнивать, к примеру даже указатель на массив символов(строку)? Для вызова нужных функций необходимо больше информации о типе, чем местоположение в памяти и размер. |
|||
|
||||
| knut |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 7.2.2006 Репутация: нет Всего: нет |
stat007,
лучше Николай Джосаттис,Дэвид Вандервуд тебе не кто не расскажет читай "Шаблоны С++. Справочник разработчика." а вот будут вопросы тут тебе точно помогут и на любой вопрос ответят --------------------
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |