27 статей
Шаблоны классов и функций как инструмент обобщённого программирования. Рассматриваются параметризация типами и значениями и семейства функций и классов, генерируемых компилятором.
Причины появления многопоточности, начиная с закона Мура и ограничений роста производительности процессоров. Вводятся базовые понятия потоков и параллельного выполнения.
Concepts как современная замена SFINAE-трюков для ограничения шаблонных параметров. Объясняется, зачем нужны концепты и как они делают ограничения читаемыми.
Продолжение темы метапрограммирования через type traits вроде is_same. Показывается, как компилятор через специализации шаблонов выводит свойства типов ещё до запуска программы.
Введение в шаблонное метапрограммирование и вычисления на этапе компиляции. Разбирается порядок выбора специализаций шаблонов на примере собственной реализации is_same.
Реализация собственного tuple с использованием шаблонной рекурсии по пакету типов. Разбирается доступ к N-му элементу и различие между TAD и CTAD.
Вариативные шаблоны и пакеты параметров, появившиеся в C++11. Показывается рекурсивная обработка аргументов и возможности оператора развёртки пакета.
Rvalue-ссылки и move-семантика как способ избегать лишних копирований. Рассматриваются move-конструктор, move-присваивание и сворачивание ссылок.
Виды приведения типов в C++ — static_cast, dynamic_cast, const_cast и reinterpret_cast. Разбираются их отличия от C-style cast и ситуации, где каждый из них уместен.
Пошаговая реализация собственного аналога std::function. Показывается, как через специализацию шаблона по сигнатуре вызова строится обёртка для произвольных вызываемых объектов.