Темы идут в произвольном порядке и не мапятся 1 к 1 на занятия. Более того, скорее всего осветить все из них за один семестр не удастся. Программа продумана не до конца и будет уточняться по ходу дела.
- Templates. Templateable entities, kinds, metafunctions
- Template debugging. Dependent false assertion, tracers, archetypes
- Name resolution, two-phase lookup, dependent names
- Type deduction. Template arguments, auto, deduction guides
- Perfect forwarding. Unversal references, argument forwarding, result forwarding, decltype(auto)
- Friends, Barton–Nackman trick
- Concepts, requirements
- Stateful metaprogramming with friends
- Reflection tricks. std::source_location, enum reflection, struct reflection
- Type lists
- Traits and policies
- Policy based design, Mixins, EBCO
- Polymorphism. VTables, templates, macros, link time polymorphism, CRTP, type erasure
- Multimethods
- Named template arguments trick
- Hierarchy generation
- Tuples and variants
- OO patterns revisited: factory, abstract factory, prototype, visitor, command, observer, strategy...
- Niebloids
- Tag invoke
- Ranges
- Macros and codegen
refactoring.guru — сайт про паттерны и рефакторинг
Concepts and constraints — cppreference
Концепты: упрощаем реализацию классов std utility — доклад Андрея Давыдова
Метапрограммирование, щадящее компилятор — доклад Андрея Давыдова
Building Range Adaptors (part 1, part 2) — Chris Di Bella, CppCon
Move only folly::Function — Sven Over, CppCon
Inplace std::function alternative for audio processing — Tom Poole, CppCon
C++14 Reflections Without Macros, Markup nor External Tooling — Антон Полухин, CppCon
How to Hack C++ with Templates and Friends
C++ vtables — таблицы виртуальных функций в деталях
Customization Point Design in C++11 and Beyond — ниблоиды, CPO используемые в std::ranges
Template metaprogramming — бесплатные списки типов через std::ranges
tag_invoke: A general pattern for supporting customisable functions (P1895) — новый ультимативный механизм для CPO без измений в язык
[https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1985r1.pdf](Universal Template Parameters) — то, что мы очень хотим, но получим не скоро
function2 — улучшеный std::function
, пример реализации vtable
руками
libunifex — новый фреймворк для асинхронности в плюсах. Содержит примеры и на vtable
, и на тайплисты, и на tag_invoke
, и вообще на всё на свете
Building Range Adaptors — Chris Di Bella, CppCon
YOMM2 — библиотека для открытых (мульти)методов
Andrei Alexandrescu, "Modern C++ Design: Generic Programming and Design Patterns Applied" — слегка устаревшая классика
David Vandevoorde, Nicolai M. Josuttis, Douglas Gregor, "C++ Templates: The Complete Guide (2nd ed.)" — всё, что нужно знать о шаблонах в C++17