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 :
j'ai une classe abstraite object2D et des classes dérivées d'object 2D : square et circle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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";
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) :
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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 } }
Quelqu'un à une idée de comment je pourrais faire autrement ?
Fraggy
Partager