Виртуальный посетитель

У меня есть иерархия классов (Base и дочери A, B, C и так далее). Дерево иерархии не является конечным. Можно визит Base* используя хорошо известный шаблон посетителя для того, чтобы динамически адаптироваться к динамическому типу Base*, У посетителя есть тип, например BaseVisitor, Как это:

struct BaseVisitor;

struct Base {
virtual void accept(BaseVisitor &v) = 0;
};

struct A : Base {
int a;

A(int x) : a(x) {}
~A(void) = default;

void accept(BaseVisitor &v) override {
v->visit(*this);
}
};

struct B : Base {
float b;

B(void) : b(314.f) {}
~B(void) = default;

void accept(BaseVisitor &v) override {
v->visit(*this);
}
};

struct BaseVisitor {
void visit(Base &) {}

void visit(A &a) {
std::cout << "just visited a A; a=" << a.a << std::endl;
}

void visit(B &b) {
std::cout << "just visited a B; b=" << b.b << std::endl;
}
};

Теперь я хотел бы сделать BaseVisitor абстрактный класс для того, чтобы наследовать новых посетителей. Проблема возникает, когда я хочу определить абстрактный класс:

struct ABaseVisitor {
virtual void visit(Base &) = 0; /* huh? */
};

Есть ли у вас какие-либо идеи?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]