public:
void accept(Visitor *v) override {
v.visit(*this);
}
}
....
Foo *elem = ...;
GetType visitor;
почему мы дальше вызываем
elem->accept(visitor);
это ведь по сути тоже самое, что и
visitor.visit(elem)
в чём смысл лишнего посредника в виде
v.visit(*this);
в методе accept ???(зачем нам вообще этот accept)
по вашему куску кода не понятно примерно ничего, ну и в стандарте нет такого метода visit
В вашем примере разницы нет. А вот если соорудить Element *elem = new Foo{}; GetType visitor; То `visitor.visit(*elem)` выберет перегрузку для Element, не Foo, а dispatch через виртуальный метод выберет правильный динамический тип (Foo)
Обсуждают сегодня