[RTTI] Comment utiliser le polymorphisme et pas les RTTI
Bonjour à tous,
Question architecture d'objet, à priori.
je cherche une methode élégante (pas RTTI ou equivalent) et orientée objet pour coder un truc comme ca :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
vector<object2D*> v;
v.push_back(new square());
v.push_back(new square());
v.push_back(new circle());
v.push_back(new circle());
v.push_back(new circle());
v.push_back(new circle());
for (size_t i=0 ; i<v.size() ; i++)
for (size_t j=0 ; j<v.size() ; j++)
if (v[i]->collide(v[j]))
cout << i << "<->" << j << = <<"collide\n"; |
j'ai une classe abstraite object2D et des classes dérivées d'object 2D : square et circle.
je cherche a detecter les collisions entre square/square et square/circle avec les object2D que j'ai dans un vecteur d'object2D abstrait.
un truc genre (gardez juste a l'esprit que c'est du pseudo code :p
rien ne compile, rien ne marche) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
class object2D
{
virtual bool collide(object2D* o) = 0;
}
class square : public object2D
{
bool collide (object2D* o) //redef virtual methode
{
o->collide(dynamic_cast<square*>(this));
}
bool collide (square* s)
{
//code
}
bool collide (circle* c)
{
//code
}
}
class circle: public object2D
{
bool collide (object2D* o) //redef virtual methode
{
o->collide(dynamic_cast<circle*>(this));
}
bool collide (square* s)
{
s->collide(dynamic_cast<circle*>(this));
}
bool collide (circle* c)
{
//code
}
} |
tel quel ca ne marche pas car on se base sur la méthode virtuelle object2D::collide(object2D*) qui est défini au niveau d'object2D le parcours des tables de methode virtuelle ne fait ressortir que les collides avec object2D en parametre (et masque les autres versions)
Quelqu'un à une idée de comment je pourrais faire autrement ?
Fraggy
quelqu'un peut il m'aider ?
Si ce post n'est pas au bon endroit, dites moi ou le tranférer. Dans ODE et Bullet Physics Library chaque élément est typé soit il n'y a pas de conteneur d'objet abstrait soit on recast chaque objet dans le bon type.
A force de creuser le pb j'ai l'impression que c'est pas possible de faire autrement.
quelqu'un peut il m'aider ?
Visiteur c'est trés interessant
merci pour toutes vos réponses :)
je vais voir avec visiteur, si je m'en sort !