Curiously Recurring Template Pattern (CRTP), также известна как статичеcкий полиморфизм или полиморфизм времени компиляции.
Принцип CRTP основывается на том, что шаблонный класс Base использует в качестве шаблонного параметра сам себя, будучи при этом базовым классом для некоторого производного класса Derived.
c
Преимущества CRTP перед динамическим полиморфизмом (с виртуальными функциями):
Недостатки:
Сравнение с динамическим полиморфизмом:
| Аспект | CRTP (статический полиморфизм) | Динамический полиморфизм (виртуальные функции) |
|---|---|---|
| Разрешение вызова | Время компиляции | Время выполнения |
| Производительность | Выше (нет накладных расходов vtbl) | Ниже (есть накладные расходы vtbl) |
| Накладные расходы | Нет vptr/vtbl | Есть vptr/vtbl |
| Гибкость (коллекции) | Нет (нельзя работать с разнородными типами через общий базовый указатель/ссылку) | Да (можно работать с разнородными типами) |
| Обнаружение ошибок | Время компиляции | Время выполнения |
| Сложность | Выше для новичков | Ниже для новичков |