Концепты: упрощаем реализацию классов std utility

День 2 /  / Зал 1  /  RU / Хардкор. Сложный низкоуровневый доклад, требующий от слушателя знаний технологии.

Появляющиеся в C++20 концепты — давно и широко обсуждаемая тема. Несмотря на избыток материала, накопившегося за годы (в т. ч. выступления экспертов мирового уровня), среди прикладных программистов (не засыпающих ежедневно в обнимку со стандартом) все еще остается неразбериха, что же такое С++20-концепты и так ли они нам нужны, если есть проверенный годами enable_if. Частично виной тому то, как концепты эволюционировали за ~15 лет (Concepts Full + Concept Map -> Concepts Lite), а частично то, что концепты получились непохожими на аналогичные средства в других языках (Java/С# generic bounds, Rust traits, ...).

Доклад начнется с краткого обзора concept-related нововведений C++20, после чего мы посмотрим на реализацию некоторых классов и функций STL, сравнивая C++17 и С++20-решения. К примеру:

  • для реализации std::optional сейчас приходится использовать иерархию наследования глубины 7, в С++20 это будет не нужно;
  • для default-конструктора std::pair сейчас требуется 2 шаблонные функции, в С++20 — 1 нешаблонная;
  • часто шаблонные классы частично специализируются, в случае, когда у шаблонных параметров есть какие-то специальные свойства, c концептами это делать удобнее и правильнее.

От слушателей предполагается общее представление, что такое концепты и SFINAE. Также будет полезно знакомство со стандартной библиотекой C++, знание тонкостей и деталей реализации не требуется.


Наши контакты