= 0;
virtual ~Visitor() = default;
};
class Element {
public:
virtual void accept(Visitor &v) = 0;
virtual ~Element() = default;
};
class Foo : public Element {
public:
void accept(Visitor &v) override {
v.visit(*this);
}
};
class Bar : public Element {
public:
void accept(Visitor &v) override {
v.visit(*this);
}
};
class GetType : public Visitor {
public:
std::string value;
public:
void visit(Foo &ref) override {
value = "Foo";
}
};
int main() {
Foo foo;
Bar bar;
Element *elements[] = {&foo, &bar};
for (auto elem : elements) {
GetType visitor;
elem->accept(visitor);
}
}
Правильно ли я понимаю, что мы создаём метод accept и уже через него вызываем метод visit из Visitor(вместо вызова напрямую), только лишь чтобы воспользоваться динамическим полиморфизмом?
что значит "Только воспользоваться"
Обсуждают сегодня