Non mais serieux c'est quoi cette merde la, une dependence cyclique dans un pattern pfffffffffff.
class Foo : QObject { Q_OBJECT }; class Bar : QObject { Q_OBJECT }; class /* fake */ Visitor { void foo(QObject *toto) { if (toto->inherits("Foo")) visit(static_cast<Foo *>(toto)); else if (toto->inherits("Bar")) visit(static_cast<Bar *>(toto)); else qFatal("invalid parameter to foo"); } void visit(Foo *); void visit(Bar *); };
class Foo; class Bar; class AbstractVisitor { virtual void visit(Foo *) = 0; virtual void visit(Bar *) = 0; } class Object { virtual void accept(AbstractVisitor *) = 0; }; class Foo : Object { virtual void accept(AbstractVisitor *v) {v->visit(this);} }; class Bar : Object { virtual void accept(AbstractVisitor *v) {v->visit(this);} }; class Visitor : AbstractVisitor { void foo(Object *toto) { toto->accept(this); } virtual void visit(Foo *); virtual void visit(Bar *); };