Електронний каталог науково-технічної бібліотеки ІФНТУНГ

004.4
В17          Вандевурд, Д.
    Шаблоны С++ [Текст] : справ. разработчика / Д. Вандевурд, Н. М. Джосаттис. – М.; СПб.; К. : Вильямс, 2008. – 544 с.

   Шаблоны C++ представляют собой активно развивающуюся часть языка программирования, предоставляющую программисту новые возможности быстрой разработки эффективных и надежных программ и повторного использования кода. Данная книга, написанная в соавторстве теоретиком C++ и программистом-практиком с большим опытом, удачно сочетает строгость изложения и полноту освещения темы с вопросами практического использования шаблонов. В книге содержится масса разнообразного материала, относящегося к программированию с использованием шаблонов, в том числе материал, который даст опытным программистам возможность преодолеть современные ограничения в этой области. Книга предполагает наличие у читателя достаточно глубоких знаний языка C++; тем не менее стиль изложения обеспечивает доступность материала как для квалифицированных специалистов, так и для программистов среднего уровня. Оглавление Предисловие 17 Благодарности 18 Глава 1. Об этой книге 21 Часть I. Основы 29 Глава 2. Шаблоны функций 31 Глава 3. Шаблоны классов 43 Глава 4. Параметры шаблонов, не являющиеся типами 57 Глава 5. Основы работы с шаблонами 65 Глава б. Применение шаблонов на практике 83 Глава 7. Основные термины в области шаблонов 111 Часть П. Углубленное изучение шаблонов 117 Глава 8. Вглубь шаблонов 119 Глава 9. Имена в шаблонах 143 Глава 10. Инстанцирование 165 Глава 11. Вывод аргументов шаблонов 193 Глава 12. Специализация и перегрузка 205 Глава 13. Направления дальнейшего развития 231 Часть III. Шаблоны и конструирование 255 Глава 14. Полиморфные возможности шаблонов 257 Глава 15. Классы свойств и стратегий 273 Глава 16. Шаблоны и наследование 311 Глава 17. Метапрограммы 325 Глава 18. Шаблоны выражений 347 Часть IV. Нетрадиционное использование шаблонов 369 Глава 19. Классификация типов 371 Глава 20. Интеллектуальные указатели 387 Глава 21. Кортежи 417 Глава 22. Объекты-функции и обратные вызовы 437 Приложение А. Правило одного определения 493 Приложение Б. Разрешение перегрузки 505 Библиография 517 Глоссарий 521 Предметный указатель 532 Предисловие 17 Благодарности 18 Глава 1. Об этой книге 21 1.1. Что необходимо знать, приступая к чтению этой книги 22 1.2. Структура книги в целом 22 1.3. Как читать эту книгу 23 1.4. Некоторые замечания о стиле программирования 24 1.5. Стандарт и практика 26 1.6. Примеры кода и дополнительная информация 26 1.7. Обратная связь с авторами 26 Часть I. Основы 29 Зачем нужны шаблоны 29 Глава 2. Шаблоны функций 31 2.1. Первое знакомство с шаблонами функций 31 2.1.1. Определение шаблона 31 2.1.2. Использование шаблонов 32 2.2. Вывод аргументов 34 2.3. Параметры шаблонов 35 2.4. Перегрузка шаблонов функций 37 2.5. Резюме 42 Глава 3. Шаблоны классов 43 3.1. Реализация шаблона класса Stack 43 3.1.1. Объявление шаблонов классов 44 3.1.2. Реализация функций-членов 45 3.2. Использование шаблона класса Stack 47 3.3. Специализации шаблонов класса 49 3.4. Частичная специализация 51 3.5. Аргументы шаблона, задаваемые по умолчанию 52 3.6. Резюме 54 8 Содержание Глава 4. Параметры шаблонов, не являющиеся типами 57 4.1. Параметры шаблонов классов, не являющиеся типами 37 4.2. Параметры шаблонов функций, не являющиеся типами 61 4.3. Ограничения на параметры шаблонов, не являющиеся типами 62 4.4. Резюме 63 Глава 5. Основы работы с шаблонами 65 5.1. Ключевое слово typename 65 5.2. Использование this-> 67 5.3. Шаблоны-члены классов 68 5.4. Шаблонные параметры шаблонов 72 5.5. Инициализация нулем 78 5.6. Использование строковых литералов в качестве аргументов шаблонов функций 79 5.7. Резюме 82 Глава б. Применение шаблонов на практике 83 6. 1. Модель включения 83 6.1.1. Ошибки при компоновке 83 б. 1.2. Шаблоны в заголовочных файлах 85 6.2. Явное инстанцирование 87 6.2.1. Пример явного инстанцирования шаблона 87 6.2.2. Сочетание модели включения и явного инстанцирования 88 6.3. Модель разделения 89 6.3.1. Ключевое слово export 90 6.3.2. Ограничения модели разделения 92 6.3.3. Составление программы для модели разделения 93 6.4. Шаблоны и inline 94 6.5. Предварительно откомпилированные заголовочные файлы 95 6.6. Отладка шаблонов 98 6.6.1. Дешифровка ошибок-романов 98 6.6.2. Мелкое инстанцирование 100 6.6.3. Длинные имена 103 6.6.4. Трассировщики 103 6.6.5. Интеллектуальные трассировщики 107 6.6.6. Прототипы 108 6.7. Заключение 108 6.8. Резюме 109 Глава 7. Основные термины в области шаблонов 111 7.1. "Шаблон класса" или "шаблонный класс" 111 7.2. Инстанцирование и специализация 112 7.3. Объявления и определения 113 7.4. Правило одного определения 114 7.5. Аргументы и параметры шаблонов 114 Часть П. Углубленное изучение шаблонов 117 Глава 8. Вглубь шаблонов 119 8.1. Параметризованные объявления 119 8.1.1. Виртуальные функции-члены 122 8.1.2. Связывание шаблонов 122 8.1.3. Первичные шаблоны 124 8.2. Параметры шаблонов 124 8.2.1. Параметры типа 125 8.2.2. Параметры, не являющиеся типами 125 8.2.3. Шаблонные параметры шаблона 126 8.2.4. Аргументы шаблона, задаваемые по умолчанию 127 8.3. Аргументы шаблонов 128 8.3.1. Аргументы шаблонов функций 129 8.3.2. Аргументы типов 132 8.3.3. Аргументы, не являющиеся типами 133 8.3.4. Шаблонные аргументы шаблонов 135 8.3.5. Эквивалентность 137 8.4. Друзья 138 8.4.1. Дружественные функции 138 8.4.2. Дружественные шаблоны 141 8.5. Заключение 142 Глава 9. Имена в шаблонах 143 9.1. Систематизация имен 143 9.2. Поиск имен 145 9.2.1. Поиск, зависящий от аргументов 147 9.2.2. Внесение дружественных имен 149 9.2.3. Внесение имен классов 150 9.3. Синтаксический анализ шаблонов 151 9.3.1. Зависимость от контекста в нешаблонных конструкциях 152 9.3.2. Зависимые имена типов 154 9.3.3. Зависимые имена шаблонов 156 9.3.4. Зависимые имена в объявлениях using 158 9.3.5. ADL и явные аргументы шаблонов 159 9.4. Наследование и шаблоны классов 160 9.4.1. Независимые базовые классы 160 9.4.2. Зависимые базовые классы 161 9.5. Заключение 164 Глава 10. Инстанцирование 165 10.1. Инстанцирование по требованию 165 10.2. Отложенное инстанцирование 167 10.3. Модель инстанцирования C++ 170 10.3.1. Двухфазный поиск 170 10.3.2. Точки инстанцирования 171 10.3.3. Модели включения и разделения 174 10.3.4. Поиск в единицах трансляции 175 10.3.5. Примеры 176 10.4. Схемы реализации 178 10.4.1. "Жадное" инстанцирование 180 10.4.2. Инстанцирование по запросу 181 10.4.3. Итеративное инстанцирование 183 10.5. Явное инстанцирование 186 10.6. Заключение 190 Глава 11. Вывод аргументов шаблонов 193 11.1. Процесс вывода 193 11.2. Выводимый контекст 196 11.3. Особые ситуации вывода 198 11.4. Допустимые преобразования аргументов 199 11.5. Параметры шаблона класса 199 11.6. Аргументы функции по умолчанию 200 11.7. Метод Бартона-Нэкмана 201 11.8. Заключение 203 Глава 12. Специализация и перегрузка 205 12.1. Когда обобщенный код не совсем хорош 205 12.1.1. Прозрачная настройка 206 12.1.2. Семантическая прозрачность 207 12.2. Перегрузка шаблонов функций 208 12.2.1. Сигнатуры 210 12.2.2. Частичное упорядочение перегруженных шаблонов функций 212 12.2.3. Правила формального упорядочения 213 12.2.4. Шаблоны и нешаблоны 215 12.3. Явная специализация 215 12.3.1. Полная специализация шаблона класса 216 12.3.2. Полная специализация шаблона функции 220 12.3.3. Полная специализация члена 222 12.4. Частичная специализация шаблони класса 225 12.5. Заключение 229 Глава 13. Направлення дальнейшего развития 231 13.1. Коррекция угловых скобок 231 13.2. Менее строгие правила использования ключевого слова typename 232 13.3. Аргументы шаблонов функций по умолчанию 233 13.4. Строковые литералы и выражения с плавающей точкой в качестве аргументов шаблонов 235 13.5. Менее строгие правила соответствия для шаблонных параметров шаблона 237 13.6. typedef-шаблоны 238 13.7. Частичная специализация шаблоне" функций 239 13.8. Оператор typeof 241 13.9. Именованные аргументы шаблонов 242 13.10. Статические свойства 243 13.11. Пользовательская диагностика инстанцирования 244 13.12. Перегруженные шаблоны классов 247 13.13. Параметры-списки 248 13.14. Управление размещением данных 250 13.15. Вывод на основе инициализатора 251 13.16. Функциональные выражения 252 13.17. Заключение 254 Часть III. Шаблоны и конструирование 255 Глава 14. Полиморфные возможности шаблонов 257 14.1. Динамический полиморфизм 257 14.2. Статический полиморфизм 260 14.3. Сравнение динамического и статического полиморфизма 263 14.4. Новые виды шаблонов проектирования 265 14.5. Обобщенное программирование 266 14.6. Заключение 269 Глава 15. Классы свойств и стратегий 273 15.1. Пример: суммирование последовательности 273 15.1.1. Фиксированные классы свойств 274 15.1.2. Свойства-значения 277 15.1.3. Параметризованные свойства 281 15.1.4. Стратегии и классы стратегий 283 15.1.5. Различие между свойствами и стратегиями 285 15.1.6. Шаблоны членов и шаблонные параметры шаблонов 287 15.1.7. Комбинирование нескольких стратегий и/или свойств 289 15.1.8. Накопление с обобщенными итераторами 289 15.2. Функции типа 290 12 Содержание 15.2.1. Определение типа элемента 291 15.2.2. Определение типов классов 293 15.2.3. Ссылки и квалификаторы 295 15.2.4. Свойства продвижения 298 15.3. Свойства стратегий 301 15.3.1. Типы параметров только для чтения 302 15.3.2. Копирование, обмен и перемещение 305 15.4. Заключение 310 Глава 16. Шаблоны и наследование 311 16.1. Именованные аргументы шаблона 311 16.2. Оптимизация пустого базового класса 315 16.2.1. Принципы размещения 315 16.2.2. Члены как базовые классы 318 16.3. Модель необычного рекуррентного шаблона 320 16.4. Параметризованная виртуальность 323 16.5. Заключение 324 Глава 17. Метапрограммы 325 17.1. Первый пример метапрограммы 325 17.2. Значения перечислимого типа и статические константы 327 17.3. Второй пример: вычисление квадратного корня 329 17.4. Применение переменных индукции 333 17.5. Полнота вычислений 336 17.6. Рекурсивное инстанцирование и рекурсивные аргументы шаблона 337 17.7. Метапрограммы для развертывания циклов 338 17.8. Заключение 342 Глава 18. Шаблоны выражений 347 18.1. Временные объекты и раздельные: циклы 348 18.2. Программирование выражений в аргументах шаблонов 353 18.2.1. Операнды шаблонов выражений 354 18.2.2. Тип Array 357 18.2.3. Операторы 359 18.2.4. Подведем итог 361 18.2.5. Присвоение шаблонов выражений 363 18.3. Производительность и ограничения шаблонов выражений 364 18.4. Заключение 365 Часть IV. Нетрадиционное использование шаблонов 369 Глава 19. Классификация типов 371 19.1. Определение фундаментальных типов 371 19.2. Определение составных типов 373 19.3. Определение типов функций 376 19.4. Классификация перечислений с помощью разрешения перегрузки 380 19.5. Определение типов классов 382 19.6. Окончательное решение 383 19.7. Заключение 386 Глава 20. Интеллектуальные указатели 387 20.1. Holder и Trule 387 20.1.1. Защита от исключений 388 20.1.2. Holder 390 20.1.3. Holder в качестве члена класса 392 20.1.4. Захват ресурса есть инициализация 394 20.1.5. Ограничения Holder 394 20.1.6. Копирование Holder 396 20.1.7. Копирование Holder при вызовах функций 397 20.1.8. Trule 397 20.2. Счетчики ссылок 400 20.2.1. Где находится счетчик 401 20.2.2. Параллельный доступ к счетчику 402 20.2.3. Деструкция и освобождение памяти 403 20.2.4. Шаблон CountingPtr 404 20.2.5. Простой незахватывающий счетчик 407 20.2.6. Шаблон простого захватывающего счетчика 409 20.2.7. Константность 410 20.2.8. Неявные преобразования типов 411 20.2.9. Сравнения 414 20.3. Заключение 415 Глава 21. Кортежи 417 21.1. Класс Duo 417 21.2. Рекурсивное вложение объектов класса Duo 422 21.2.1. Количество полей 423 21.2.2. Типы полей 424 21.2.3. Значения полей 425 21.3. Создание класса Tuple 430 21.4. Заключение 435 Глава 22. Объекты-функции и обратные вызовы 437 22.1. Прямые, непрямые и встраиваемые вызовы 438 22.2. Указатели и ссылки на функции 441 22.3. Указатели на функции-члены 444 22.4. Функторы-классы 447 22.4.1. Первый пример функторов-классов 447 22.4.2. Типы функторов-классов 448 22.5. Определение функторов 450 22.5.1. Функторы в роли аргументов типа шаблонов 450 22.5.2. Функторы в роли аргументов функций 451 22.5.3. Сочетание параметров функции и параметров типа шаблона 452 22.5.4. Функторы в роли не являющихся типами аргументов шаблонов 453 22.5.5. Инкапсуляция указателей на функции 454 22.6. Самотестирование 457 22.6.1. Анализ типа функтора 457 22.6.2. Доступ к типам параметров 458 22.6.3. Инкапсуляция указателей на функции 460 22.7. Композиции объектов-функций 465 22.7.1. Простая композиция 466 22.7.2. Композиция разных типов 470 22.7.3. Функторы с несколькими параметрами 473 22.8. Связывание значений 476 22.8.1. Выбор параметров связьвания 477 22.8.2. Сигнатура связывания 479 22.8.3. Выбор аргументов 480 22.8.4. Вспомогательные функции 486 22.9. Операции с функторами: полная реализация 489 22.10. Заключение 491 Приложение А. Правило одного определения 493 А.1. Единицы трансляции 493 А.2. Объявления и определения 494 А.З. Детали правила одного определения 495 А.3.1. Ограничения "одно на программу" 495 А.3.2. Ограничения "одно на единицу трансляции" 498 А.3.3. Ограничения эквивалентности единиц перекрестной трансляции 499 Приложение Б. Разрешение перегрузки 505 Б.1. Когда используется разрешение перегрузки 506 Б.2. Упрощенное разрешение перегрузки 506 Б.2.1. Неявный аргумент для функций-членов 508 Б.2.2. Улучшение точного соответствия 510 Б.3. Детали перегрузки 511 Б.3.1. Предпочтение нешаблонных функций 511 Б.3.2. Последовательности преобразований 512 Б.3.3. Преобразования указателей 513 Б.3.4. Функторы и функции-суррогаты 514 Б.3.5. Другие контексты перегрузки 515 Библиография 517 Группы новостей 517 Книги и Web-узлы 517 Глоссарий 521 Предметный указатель 532


ISBN 978-5-8459-0513-0УДК 004.4(03)

            



Примірники
Місце збереження Кількість В наявностi
К/сх - Книгосховище 1 1


Теми документа


Статистика використання: Видач: 7





Український Фондовий Дім Інформаційно-пошукова система
'УФД/Бібліотека'