![]() |
|
Модераторы: bsa |
![]()
|
|
| kLASTER |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
доброго времени суток.
Не могу понять чем отличается "специализация" от "экземпляров" и для чего используют экземпляры. Читаю Прата С.: в его книге идет описание шаблонов, далее явная специализация, и опять специализация и экземпляры, где не очень объяснено различие. Заранее спасибо! П.С. Книга удивительно хороша, и этот момент пока единственный который мне не понятен. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
допустим у нас есть шаблон функции механизма "сборщик фруктов". Это означает, что у нас есть схема по сборке этого механизма, но самого механизма нет.
когда мы применяем шаблон, компилятор (неявно) создает экземпляр механизма функции, если такового (для нужного набора типов) еще не существует. Т.е. у функции появляется код с адресом, по которому ее можно связат` с другими функциями. В определенных ситуациях бывает желание не отдавать схему, а предоставить несколько готовых механизмов, например, по сборке яблок и груш. Тогда нам пригождается явное создание экземпляров, коими и будут пользоваться клиенты, а завод оставляет за собой схему. Бывают и другие ситуации, когда схема не подходит под все нужные случаи.. Например сборщик боярышника выходит по этой схеме непригодный или неэфективый. Тогда у нас остается возможность специализировать подкорректировать схему под нужный тип фрукта. Этим получим более универсальную схему, включающую корректировки под особые случаи.. Это сообщение отредактировал(а) mes - 24.5.2013, 15:23 |
|||
|
||||
| kLASTER |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
я так понимаю, что при прототипировании шаблона уже создаются функции(или экземпляры)
не совсем понял, что имелось ввиду.
- из этого кода не понятно "явное создание экземпляра для char" - это таже самая явная специализация(и почему шаблон находится в int main{...})? - "неявное создание экземпляра шаблона"- т.е. использование шаблона по назначению? - "явная спец для job" - это понятно. - "явное создание экземпляра" - это обычное использование шаблона, какие экземпляры? непонятно. Это сообщение отредактировал(а) kLASTER - 24.5.2013, 15:58 |
||||||
|
|||||||
| NoviceF |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
раз уж тут такая тема..
Как широко известно, для оформления шаблонов в исходном коде, применяются в основном 2 метода: 1) inclusion model, она же модель включения. 2) явное инстанцирование шаблонов В одной авторитетной книжке, 2я модель не рекомендуется для применения в серьёзных проектах (Шаблоны c++).. Но с другой стороны, есть неподтверждённые слухи, что и 1й вариант может вызывать проблемы в случае, если класс описанный при его помощи, будет инстанцирован с одинаковым аргументом в нескольких единицах трансляции (я не проверял, но говорят могут быть проблемы с линковкой), при том, что 2й вариант исключает такие ситуации. Ну и ещё у меня нет понимания, насколько целесообразно и эффективно использовать inline вместе с шаблонами.. Собственно, я знаю, где наверняка есть ответы на эти вопросы, но пока руки не доходят вникнуть.. так что буду благодарен, если кто-нибудь выскажется на тему. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Уверен, что это правильно? Добавлено через 2 минуты и 49 секунд Кажется создание экземпляра нужно, чтобы передать куда-нибудь адрес функции. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| kLASTER |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 14.9.2011 Репутация: нет Всего: нет |
конечно должно быть "<job>", видимо опечатка в учебнике, хотя в следующем примере:
Здесь lesser<>(m, n) - это неявный эжкземпляр? lesser<int>(x, y) - явный экземпляр? |
||||
|
|||||
| mes |
|
||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
kLASTER, например в таком случае:
}
получите :
потому что ни одного экземпляра в маин мы создать не можем, за неимением схемы.. у нас только прототип.. явное создание экземпляра для трех приведенных типов спасет проект от провала |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |