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

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

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

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

Такая величина может быть одной из перечисленных ниже. 134 Глава 8. Вглубь шаблонов При установлении соответствия аргумента параметру„который является указателем или ссылкой, преобразования, определенные пользователем (конструкторы с одним аргументом и операторы преобразования), а также преобразования обьекта-наследника в объект-родитель не рассматриваются, даже если в иных обстоятельствах зги преобразования являются корректными неявными преобразованиями. Допустимы неявные преобразования, которые придают аргументу свойства сопвс или чо1ас11е. Ниже приведено несколько примеров, не являющихся типами аргументов шаблонов. Сешр1аае <Сурепаше Т,Т попкуре рагаш> с1азз Сг С<1пс,33>* с1; // Целочисленный тип 1пс а; С<1пг*,аа>* с2; // Адрес внешней переменной о а Т()г а Т(1пс) г С<чо1с) (*)(Тпе),ай>* с3) // Имя функции: разрешение перегрузки // приводит к выбору Т(1па) с1авв Х Тпс и; втакфс Ьоо1 Ьг ): С<Ьоо1й, Х::Ь>* с4; // Статические члены класса // являются допустимыми С<1пт Х::*,аХ::и>* сбг // Пример указателя на член класса сешр1аае<аурепагае Т> чо16 сешр1 тцпс(); С<чоЫ(),йсешр1 аппо<с)оиЬ1е»* сб; // Экземпляры шаблона функции // являются функциями Основным ограничением для аргументов шаблона является следующее: компилягор или компоновщик должны быть способны точно определить их значения при созлании исполняемого файла.

Значения, которые не известны к моменту начала выполнения программы (например, адреса локальных переменных), не отвечают требованию, состоящему в том, по шаблоны должны быть инсшвцированы к моменту завершения построения программы. Но даже при выполнении данного ограничения существует несколько константных выражений, которые (возможно, зто поюжется странным) в настоящее время некорректны: ° нулевые указатели; ° числа с плавающей точкой; ° строковые литералы. 8.3. Аргументы шаблонов 135 Одна из проблем со строковыми литералами состоит в том, что два идентичных литерала могут храниться по двум разным адресам. Существует альтернативный (но громоздкий) способ определения шаблонов, генерация экземпляров которых осуществляется через строки: определение дополнительной переменной для хранения строки.

сеюр1асе <сЬаг сопзс* ясг> с1авз Меззаде> ехсегп сЬаг сопле Ье11о[) = "Не11о Мог16!" Меяваде<Ье11о>* Ье11о ювд; Отметим, что в данном примере необходимо указывать ключевое слово ехсегп, поскольку в противном случае переменная константного массива будет иметь внутреннее связывание. Еще один пример приведен в разделе 4.3, стр. 62. В разделе 13.4, стр. 235, рассматриваются возможные будущие изменения в этой области. Ниже приведено несколько других неверных примеров.

сетр1аге<гурепаюе т, т попгуре рагаю> с1авв С; с1авя Вазе ( Тпс ) Ьазе; с1авв Бег(чес): риЬ((с Вазе ( с)ег(лед оЬ5; С<Вазе*,ас)ег1чес) оЬ5>* егг1; // ОШИБКА: преобразования // производного класса к // базовому не рассматриваются С<(пса, Ьазе.(>* егг2; // ОШИБКА: поля переменных // не считаются переменными Тпс а [10); С<(пг*, за[0)>* егг3; // ОШИБКА: адреса отдельных // элементов массива также // не допускаются 8.3.4. Шаблонные аргументы шаблонов Шаблонный аргумент шаблона должен быть шаблоном класса с параметрами, которые точно соответствуют параметрам шаблонного параметра шаблона, вместо которого он подставляется. Лреумеоты шаблона, заданные по умолчанию для шаблонного аргумента шаблона, игноРируются (но если шаблонный иараметр шаблона имеет аргументы 13б Глава 8.

Вглубь шаблонов по умолчанию, они учитываются при инстанцировании). Таким образом, приведенный ниже пример некорректен. $1пс1ибе <11вс> // В этом файле есть объявление // пашеврасе вей ( // Сешр1аее <Сурепаше Т, // ьурепаше А11осасог = а11осасог<т» // с1азв 11ве; //) Сешр1аее<еурепаше Т1, Сурепаше Т2, сешр1асе<сурепаше> с1авз Сопеайпег> // Ожидается, что Сопеа1пег — шаблон с одним параметром с1авв Ке1асфоп ( рп)з11с: ргтасе: Сопеа1пег<Т1> бош1; Сопсафпег<Т2> бош2; Тпс ша1п() ( Ке1аейоп<1пе,бопЫе,веб::11ве> ге1; // ОШИБКА: веб::11ве имеет более одного // параметра шаблона Проблема в этом примере заключается в том, что шаблон вес):: 11зе стандартной библиотеки имеет более одного параметра.

Второй параметр (который описывает так называемый распределитель памяти) имеет значение по умолчанию, но оно не учитывается при установлении соответствия зес):: 11ве параметру Сопеа1пег. Иногда выход из таких ситуаций заключается в том, что для шаблонного параметра шаблона задается параметр со значением по умолчанию.

Для предыдущего примера можно переписать шаблон, как показано ниже. $1пс1пс)е <шешоту> сешр1асе<сурепаше т1, Сурепаше Т2, Сешр1аее<еурепаше Т, ьурепаше = все)::а11осасог<Т> > с1азв Сопеафпег> // теперь шаблон Сопеафпег может быть шаблоном // контейнера иэ стандартной библиотеки с1авв Ке1аефоп ( риЫ1с: 8.3. Аргументы шаблонов 137 ркйчасе: Сопсаьпег<Т1> дош1з Сопга1пек<Т2> бош2; 8.3.5.

Эквивалентность Два набора аргументов шаблона являются эквивалентными, если значения аргумеитов попарно идентичны друг другу. Для аргументов типа имена, заданные с помощью Сурес)еб, ие имеют значения — в конечном счете сравнивается тип, лежащий в основе имени. Для целочисленных аргументов, ие являющихся типом, сравиивается значение аргумента; способ получения этого значения роли ие играет. Сказанное выше иллюстриРуется следующим примером: Сешр1аее <Сурепаше Т, 1пс 1> с1авв м1хз сурепей 1пк 1пе; Мйх<1пг., М1Х<1пе, 3*3>* р1з 4+5>* р2з /У р2 имеет тот же тип, что и р1 Функция, сгенерированная из шаблона функции, никогда ие эквивалентна обычной ФУнкции, даже если обе имеют один и тот же тип и одно и то же имя. Отсюда вытекают два важных следствия для членов классов. К Функция, сгенерированная из шаблоиа функции-члена, никогда ие может переопределять виртуальную функцию.

2. Конструктор, сгенерированный из шаблона конструктора, никогда ие может быть констРуктором копирования по умолчанию (точке так же оператор присвоения, сгеиерироваииый из шаблона присвоения, никогда ие является оператором копирующего присвоеиия; однако это гораздо меньшая проблема, поскольку, в отличие от коиструкторов копироваиия, операторы присвоения никогда ие вызываются неявно). Понятно, что это ие совсем то, что нужно, ио зато такое решение обеспечивает возможиость использоваиия стандартных шаблонов контейнеров.

В разделе 13.5, стр. 237, рассмотрены возможные изменения в этой области в будущем. Тот факт, что синтаксически для объявления шаблонного параметра шаблона может быть использовано только ключевое слово с1аев, ие следует толковать как указание, что в качестве подсташшемых аргументов допускаются только шаблоны класса, объявлеииые с помощью ключевого слова с1авв. В действительности для шаблонного параметра шаблона вполне корректными аргументами являются "шаблоны структур" и "шаблоны объединений". Это утверждение аналогично приведенному выше, которое гласит, что в качестве аргумента ши параметра типа шаблона, объявленного с помощью ключевого слова с1авв, можно использовать любой тип.

138 Глава 8. Вглубь шаблонов 8.4. Друзья Основная идея объявления дружественных конструкций проста: определить классы илн функции, имеющие привилегированную связь с классом, в котором присутствуют эти объявления. Содержание же этой идеи несколько сложнее, и тому есп две причины. 1. Объявления дружественных конструкций могут быть единственными объявлениями объектов. 2. Объявление дружественной функции может быть определением. Объявления дружественных классов не могут быть определениями и, следовательно, реже создают проблемы. В контексте шаблонов единственный новый аспект объявлений дружественных классов — зто возможность именовать конкретный экземпляр шаблона класса как дружественный. Гешр1аге <Сурепаше Т> с1авв Иоде; Сешр1асе <Сурепаше Т> с1авв Тгее ( йг1епд с1авв Иоде<Т>; Заметим, что шаблон класса должен быть видим в точке, где один из его экземпляров делается другом класса или шаблона класса.

В случае обычного класса 'гаков требование отсутствует. Сешр1аге <сурепаше Т> с1авв Тгее ( йг1епд с1авв Расгогу; // ВЕРНО, даже если это // первое объявление Рцссогу Йгйепд с1авв // Ошибка, если класс Иоде не с1авв Иоде<Т>; // является видимым в втой точке Более подробно этот вопрос рассматривается в разделе 9.2.2, стр. 149. 8.4.1. Дружественные функции Чтобы сделать экземпляр шаблона функции дружественным, после имени дружественной функции должны указываться угловые скобки. Угловые скобки могут содержать аргументы шаблона, но если аргументы можно вывести, угловые скобки могут быль пустыми.

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

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

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

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