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 *);
};