Шаблон рекурсивного наследника в C++
Шаблон рекурсивного наследника
передает в базовый шаблон производный класс
как аргумент, чтобы общий код вызывал методы
наследника через static_cast.
База хранит только логику, а конкретное поведение
остается в классе-потомке.
Запишем Base<D> с методом run
и Child : Base<Child>, затем выведем
метку из потомка:
#include <iostream>
template<typename D>
struct Base {
void run() {
static_cast<D*>(this)->step();
}
};
struct Child : Base<Child> {
void step() {
std::cout << 1 << "\n";
}
};
int main() {
Child item;
item.run();
return 0;
}
Добавьте struct Leaf : Base<Leaf>
с step, печатающим 2.
Вызовите run у Leaf.