Главная » Просмотр файлов » Д. Вандевурд, Н.М. Джосаттис - Шаблоны C++. Справочник разработчика (2003)

Д. Вандевурд, Н.М. Джосаттис - Шаблоны C++. Справочник разработчика (2003) (1160769), страница 20

Файл №1160769 Д. Вандевурд, Н.М. Джосаттис - Шаблоны C++. Справочник разработчика (2003) (Д. Вандевурд, Н.М. Джосаттис - Шаблоны C++. Справочник разработчика (2003)) 20 страницаД. Вандевурд, Н.М. Джосаттис - Шаблоны C++. Справочник разработчика (2003) (1160769) страница 202019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 20)

Инстанцирование и специализация Процесс создания обычных классов, функций или функций-членов из шаблонов путем подстановки реальных значений вместо их аргументов называется инстанцираванивм шаблонов. Сущность, полученная в результате инстанцирования шаблонов (класс, функция, функция-член) в общем случае называется специализацией. Однако в С++ процесс инстанцирования не является единственным способом получить специализацию. Существуют альтернативные механизмы, позволяющие программисту явно задавать объявление, привязанное к определенной подстановке параметров шаблона. Как упоминалось в разделе 3.3, стр.

49, такая специализация вводится с помощью конструкции Семр1апе«>. семр1асе «сурепаве Т1, сурепаве Т1> // Первичный шаблон с1авв МуС1авв ( // класса )' севр1асе«> // Явная специализация с1авв МуС1авв«впс1:: впк1пд, й1оап» ( Строго говоря, зто так называемая явная специализация (вхр(шг лрвс/а!/гагюп) (в отличие от инстанцирувмай, или генерируемой специалшации (!пзгапбамд зрес!а!аабоп, йепега(еб зрес(а!!ха!!оп)). Как отмечалось в разделе 3.4, стр.

51, специализации, в которых остаются параметры шаблона, называются частичными специализациями (рагйа! зрес1а!аабоп). севр1асе «сурепаае т> // частичная специализация с1авв МуС1авв«Т,Т> ( Семр1аее «Сурепаме Т> с1авв МуС1авв«Ьоо1,Т> ( // Частичная специализация Если речь идет о специализации (яаной или частичной), то общий шаблон называется первичным или основным шаблоном (рпп1агу сешр1аге). т,3.

Объявления и определения 113 7.3. Обьявления и определения В предыдущих главах понятия объявления (бес!апнюп) и определения (ЫеЯяй!ол) встречалнсь не слишком часто. Однако оба понятия достаточно точно определены в стандарте С++, и именно эти значения используются в данной книге. Объявление (бес!агайоп) является конструкцией С++, которая вводит нли повторно задает имя в области видимости С++. Такое задание всегда включает частичную классификацию имени, но для корректности объявления не требуется указание всех деталей, например: // С объявлен как класс // Й() объявлена как функция, а // р — как именованный параметр // ч объявлена как переменная с1авв С; чо16 б (зпс р); ехсегп фпс чз ехсегп йпс ч=11 // инициализация делает зто // выражение определением ч Тпл кы // Объявления глобальных переменных, // не предваряемые ехсегп, тоже // являются определениями Распространение зтого принципа на шаблоны приводит к тому, что объявление шаблона класса или шаблона функции является определением, если он имеет тело.

Следовательно, Сеыр1але <сурепаые Т> чоЫ типо(Т)1 является обьявлением, но не определением, в то время как сеюр1асе <сурепаме т> с1аве Я() з представляет собой определение. Отметим. что макроопределения и метки перехода, несмотря на то что они имеют "имена", в С++ объявлениями не считаются. Объявления становятся определениями (дейшйоп), когда делается известной информация об их структуре или, в случае переменных, когда для ннх должна быть выделена память.

Для определений типов классов и функций зто означает, что должно быть предоставлено заключенное в скобки тело. В случае переменных для определения достаточно инициализации и отсутствия директивы ехсегп. Ниже приведены примеры, которые дополняют представленные выше неопределенные объявления. с1авв С()з // Определение (и объявление) класса С чо16 й(1па р) ( // Оп)Зеделение (и объявление) функции б() веб::соцп <с р « вМ::епд11 Глава 7. Основные термины в области шаблонов 114 7.4. Правило одного определения В языке С++ на повторные объявления различных сущностей накладываются определенные ограничения. Вся совокупносп этих ограничений известна как правило одного определения (опе дейп1боп пйе — 00]1). Детали этого правила очень сложны и охватывают огромное множество ситуаций. В последующих главах различные аспекты правила одного определения будут проиллюстрированы для каждого рассматриваемого случая, а полное его описание читатель найдет в приложении А„"Правило одного определения".

На данном этапе достаточно знать лишь основные положения этого правила. ° Невстраиваемые функции и функции-члены, так же как и глобальные переменные и статические данные-члены, должны определяться однократно в рамках программы в целом. ° Типы классов (включая структуры н обьединения) и встроенные функции следует определять по крайней мере один раз в пределах единицы трансляции, и все эти определения должны быть идентичными.

Единица трансляции представляет собой то, что получается в результате обработки исходного файла процессором; другими словами, она включает содержимое файлов, заданных директивами и 1пс1пбе. Далее в книге связываемый объект (!(пкаЬ]е епгйу) будет означать одну из следующих вещей: невстраиваемая функция или функция-член, глобальная переменная или статические данные-члены, включая любой из перечисленных объектов, сгенерированный из шаблона. и 7.5. Аргументы и параметры шаблонов Сравним шаблон класса Сешр1аге <Гурепшае Т, 1пс (ц> с1авв Аггау1пС1авв ( рцЬ11с: Т аггау(1з]з с похожим обычным классом: с1авв 1эопЬ1едггау1пС1авв ( рпЬ1].с: йоцЬ1е аггау(10]з ); Последний становится, по сути, эквивалентен первому, если заменить параметры т и (ч значениями йопЬ1е и 10 соответственно. В С++ эта подстановка обозначается как с1авв АггаутпС1аив<с]опЬ1е, 10> 7.5.

Аргументы и параметры шаблонов 115 Заметим, что за именем шаблона следуют так называемые аргументы шаблона в угловых скобках. Зависят ли эти аргументы от параметров шаблона или нет, комбинация имени шаблона, за которым следуют аргументы в угловых скобках, называется идентификатором шаблона ((ешр1а(е-Ы). Это имя может использоваться почти так же, как и соответствующие нешаблонные объекты, например: (пг пабп() ( Аггау1пС1авв<йопЬ1е„10> ад; аб.аггау(101 = 1.0; Важно различать параметры шаблона и аргументы шаблона.

Коротко говоря, можно сказать, что мы "передаем аргументы, чтобы они стали параметрами" . Или, если быль „з более точным: ° параметрами шаблона являются те имена, которые перечислены после ключевого слова сешр1асе в объявлении или определении шаблона (в нашем примере — т и и); ° аргументы шаблона являются элементами, которые подставляются вместо параметров шаблона (с)опЬ1е и 10 в нашем примере). В отличие от параметров шаблона, аргументы шаблона могут представлять собой нечто большее, чем просто "имена". Подстановка аргументов шаблона вместо параметров шаблона выполняется явно посредством идентификатора шаблона, однако есть различные ситуации, когда подстановка выполняется неявно (например, если вместо параметров подставляются их аргументы по умолчанию).

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

Эта возможность используется в шаблоне Аггау1п01авв для задания размера члена массива аггау. Размер массива должен быть так называемым константным выражением, и параметр шаблона И именно таковым является. Поскольку параметры шаблона — зто обьекты времени компиляции, их можно также использовать для создания корректных аргументов шаблонов.

Приведем пример: ьегпр1асе <сурепазпе Т> о1авв )эокеп ( з В академических кругах "аргументы*' иногда называются фактическими параметрами (асшв1 рагапюгегв), а "параметры" — формальными параметрами (Гонов) рюазпеьегв). 11б Глава 7. Основные термины в области шаблонов рпЪ11о: Агкау1пС1авв<Т, 12> сопеепки; 1 Обратите внимание на то, что в данном примере т является как параметром шаблона, так и аргументом шаблона.

Таким образом, обеспечивается механизм конструирования более сложных шаблонов из более простых. Разумеется, зтот механизм не имеет существенных отличий от механизмов компоновки типов и функций. Часть П Углубленное изучение шаблонов Первая часть данной книги представляет собой учебное пособие по основным концепциям языка, на которых базируются шаблоны С++. Содержащегося в ней материала вполне достаточно для ответа на большинство вопросов, возникающих при обычном практическом программировании на С++. Вторая часть книги организована в виде справочника — в ней содержатся ответы на менее типичные вопросы, которые могут возникнуть при использовании расширенных средств языка для достижения более сложных и интересных эффектов при программировании.

Характеристики

Тип файла
DJVU-файл
Размер
5,6 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6390
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее