Уровень сложности:
Длительность курса: 44 ак.ч.
График обучения: 44 ак. часа
Аннотация
Целью реализации модуля «DEV-C221. Прикладное программирование с использованием стандартов С++11, 14, 17, 20, 23. Часть 2» является углубленное изучение слушателями новых концепций и программных средств, добавленных в язык программирования С++ согласно стандарту С++11 (С++14, 17, 20, 23), а также приобретение практических навыков по применению новых средств при решении прикладных задач.
Знания и умения, полученные в результате обучения
В результате освоения модуля обучающийся должен уметь:
• использовать новые средства С++, предоставляемые ядром языка и стандартной библиотекой согласно стандартам С++11, 14, 17, 20, 23, такие как универсальные ссылки, variadic_templates, свертки, tuples, function, variant, диапазоны (ranges), модули.
В результате освоения модуля обучающийся должен знать:
• средства С++ для продвижения типов (forward);
• понимать внутреннюю реализацию шаблонов с переменным числом параметров;
• приемы программирования с использованием диапазонов;
• обобщение действий посредством шаблона function.
В результате освоения модуля обучающийся должен приобрести практический опыт:
• разработки прикладного ПО на языке С++ с использованием новых стандартов языка С++.
Курсы, в освоении которых помогут приобретенные знания
Курсы связанных направлений
Сегодня занятий по этому курсу нет.
47 200 ₽
Расчёт стоимости с учётом возможных скидок
47 200 ₽
Скидки предоставляются в зависимости от количества слушателей, суммы договора и других условий, оговариваемых с Заказчиком.
Расчёт стоимости с учётом возможных скидок представлен как справочная информация.
Фактический размер скидки может несколько отличаться из-за округления значения суммы.
Внимательно ознакомьтесь с условиями действующих
акций и скидок...
Базовые знания в области стандартов С++11, 14, 17, 20, 23, уверенное владение ООП на С++
Курсы, обеспечивающие достаточный начальный уровень знаний
Тема 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. Перегрузка и универсальные ссылки. SFINAE
3.1 Реализация шаблонного конструктора, принимающего в качестве параметра универсальную ссылку
Пример проблемы, возникающей при использовании универсальных ссылок для реализации конструктора.
3.2 Диспетчеризация дескрипторов
Прием, разрешающий проблему перегрузки.
Использование if constexpr vs диспетчеризации
3.3 SFINAE
Понятие SFINAE.
Технология disabled templates
Механизм enable_if.
Использование SFINAE для решения проблем перегрузки.
Практические занятия
1. Использование SFINAE для решения проблемы перегруженных конструкторов
Тема 4. Исключения, static_assert
4.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::any
5.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. Промежуточная аттестация
Практические занятия Зачет