Тема 1. Универсальные ссылки (forwarding reference). Механизм forward
1.1 Понятие универсальной ссылки.
Цель введения универсальных ссылок.
Отличия от rvalue reference.
1.2 Шаблон forward<>
Реализация шаблона forward<> в стандартной библиотеке.
Как происходит восстановление типа.
Практические занятия 1. Использование шаблона forward<> при решении прикладной задачи
Тема 2. Шаблоны с переменным числом параметров (variadic_templates). 2.1 Понятие шаблона с переменным числом параметров (variadic template)
Синтаксис объявления шаблонов с переменным числом параметров.
Реализация шаблонов функций с переменным числом параметров.
Реализация шаблонов классов с переменным числом параметров.
2.2 Шаблон function, шаблон bind.
Кортежи (tuple) Реализация шаблона function.
Примеры использования.
Реализация шаблона bind.
Примеры использования.
Лямбда выражения vs bind.
Реализация шаблона tuple.
Примеры использования.
2.3 Свертка параметров шаблона (fold-expression)
Виды сверток.
Специфика использования.
Примеры использования.
Практические занятия 1. Реализация пользовательских шаблонов функций и классов с переменным числом параметров.
2. Использование шаблона function
3. Использование шаблона tuple
4. Использование fold-expression
Тема 3. Перегрузка и универсальные ссылки. SFINAE3.1 Реализация шаблонного конструктора, принимающего в качестве параметра универсальную ссылку
Пример проблемы, возникающей при использовании универсальных ссылок для реализации конструктора.
3.2 Диспетчеризация дескрипторов
Прием, разрешающий проблему перегрузки.
Использование if constexpr vs диспетчеризации
3.3 SFINAE
Понятие SFINAE.
Технология disabled templates
Механизм enable_if.
Использование SFINAE для решения проблем перегрузки.
Практические занятия 1. Использование SFINAE для решения проблемы перегруженных конструкторов
Тема 4. Исключения, static_assert4.1 Проблемы обработки исключений
Отслеживание аварийных ситуация на этапе выполнения.
Раскрутка стека при генерации исключения.
4.2 Средства для обработки (в частности межпоточных) исключений
Класс std::exception_ptr.
Функции std::current_exception(),std::rethrow_exception()
4.3 static_assert Проверки на этапе компиляции. Сравнение assert() и static_assert().
Практические занятия
1. Пример генерации исключения и обработки исключения.
2. Использование static_assert
Тема 5. Шаблоны std::variant, std::optional, std::any5.1 std::variant
Variant как безопасная альтернатива union.
Специфика использования.
Шаблоны глобальной функции visit(), holds_alternative(), get_if()
5.2 std::optional
Универсальная обертка для любого значения (в частности может не содержать никакого значения).
Специфика использования.
С++23 шаблоны and_then(), transform(), or_else()
5.3 std::any
Универсальное хранилище для любого копируемого объекта.
Специфика использования.
Шаблоны swap(), any_cast(), make_any()
Практические занятия 1. Использование шаблонов std::variant, std::optional, std::any и средств манипулирования ими при решении практических задач.
Тема 6. Добавления в ядро языка и в стандартную библиотеку. 6.1 Выравнивание данных в памяти
Неэффективность работы с невыровненными данными.
Спецификатор alignas, оператор alignof.
6.2 Классы-обертки
string_view, array
6.3 Атрибуты
noreturn, carries_dependency, deprecated, nodiscard, fallthrough, maybe_unused
6.4 Расширение функциональности контейнеров стандартной библиотеки
Реализация методов emplace_*.
В каких случаях можно достичь повышения эффективности за счет использования методов emplace_* по сравнению с push_*
Практические занятия 1. Использование нововведений в практических заданиях
Тема 7. Концепты (concepts)7.1 Понятие концепта
Отличие концептов и средств, предоставляемых стандартной библиотекой посредством <type_traits>.
Виды концептов.
Специфика.
Варианты использования.
Примеры использования
Практические занятия 1. Применение концептов в практических задачах.
Тема 8. Диапазоны (ranges)8.1 Актуальность диапазонов
Проблемы адаптации обобщенных алгоритмов стандартной библиотеки для нестандартных действий.
8.2 Понятие диапазона
Синтаксис.
Специфика использования.
Практические занятия 1. Пример использования
Тема 9. Работа с файлами и директориями9.1 Состав Filesystem библиотеки
Классы: directory_options, directory_entry, directory_iterator…
Глобальные функции: absolute(), rename(), remove()…
Практические занятия 1. Реализация поиска указанного файла в заданной директории (с учетом поддиректорий)
Тема 10. Регулярные выражения
10.1 Краткая теория регулярных выражений
Семантика формирования регулярных выражений
10.2 Средства, предоставляемые С++ для формирования и использования регулярных выражений
Классы: basic_regex, sub_match, match_results
Алгоритмы: regex_match(), regex_search(), regex_replace()
Итераторы: regex_iterator, regex_token_iterator
Исключения: regex_error
Практические занятия 1. Использование изученных средств для задач поиска
Тема 11. Промежуточная аттестацияПрактические занятия Зачет