Я пытаюсь реализовать наследуемый метод посетителя для класса, используя CRTP вместо виртуальной функции. Сначала у нас есть такой код:
#include
#include
struct A {
virtual ~A() = default;
};
struct B : A {};
struct C : A {};
template
struct Base {
void dispatch(A *a) {
if (dynamic_cast(a)) {
return static_cast(this)->func(dynamic_cast(a));
}
if (dynamic_cast(a)) {
return static_cast(this)->func(dynamic_cast(a));
}
return static_cast(this)->func(a);
}
void func(A*) { std::cout
Подробнее здесь: https://stackoverflow.com/questions/798 ... le-visitor