Перейти к содержимому
Модуль 4

Шаблоны и общее программирование

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

Шаблонные основы

  1. Шаблоны функций и тип дедукции

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

  2. Классные шаблоны и CTAD

    Создание общих структур данных с шаблонами классов. Поймите определения членов, аргументы по умолчанию и то, как CTAD C++17 позволяет опустить аргументы шаблона.

Расширенные шаблоны

  1. Специализация шаблонов и Tag Dispatch

    Овладейте полной и частичной специализацией, узнайте, когда предпочесть перегрузку, и найдите отправку тегов и если constexpr в качестве альтернативы для ветвления компиляции времени.

  2. Вариадные шаблоны и складные выражения

    Обработайте любое количество аргументов шаблона с помощью пакетов параметров. Мастер складывания выражений для элегантной, рекурсивной обработки пакетов.

  3. SFINAE, Type Traits & enable if

    Поймите, что сбой замены не является принципом ошибки, используйте черты типа для интроспекции компиляции и ограничивайте шаблоны с помощью enable if.

Современное общее программирование

  1. C++20 Концепции и ограничения

    Определение точных требований к шаблонным аргументам с использованием концепций. Напишите более чистый общий код с требованиями клаузул, сокращенных шаблонов функций и стандартных библиотечных концепций.

  2. constexpr, consteval и Compile-Time программирование

    Переместите вычисления из среды выполнения в компиляцию времени с помощью constexpr, consteval и constinit. Создавайте таблицы поиска, проверяйте конфигурации и используйте контейнеры Constexpr.

  3. Шаблоны шаблонов метапрограммирования

    Мастер расширенных шаблонов шаблонов: CRTP для статического полиморфизма, дизайн на основе политики для гибкой композиции, стирание типов для дженериков времени выполнения и руководящие принципы для использования шаблонов против виртуальной отправки.