Salut,
Ca fait quelque jour que je suis confronté à un problème de conception en C++.
Voici une simplification du problème.
On a donc une classe A qui contient des objets héritant de la class B.
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 class A { void afficher() { for (auto it = tab.begin(); it != tab.end(); ++it) it->get()->afficher(); } vector< shared_ptr<B> > tab; }; class B { virtual void afficher() = 0; }; class C : public B { virtual void afficher() { ... } ... }; class D : public B { virtual void afficher() { ... } ... };
Imaginons maintenant que la méthode afficher soit complexe. Pour réduire les responsabilités de chaque classe, il serait alors naturelle de retirer cette tache de ces classes.
Seulement voilà, je n'arrive pas à faire ça proprement : je me retrouve à utiliser des dynamic_cast
Exemple :
PS : La même problématique peut ce poser pour les attributs des classes.
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 void afficher( A &a ) { for (auto it = a.getTab().begin(); it != a.getTab().end(); ++it) { C* c; D* d; if( (c = dynamic_cast<C>( it->get() )) != NULL ) { ... } else if( (d = dynamic_cast<D>( it->get() )) != NULL ) { ... } } }
Que pensez vous de ce problème ?
Avez vous des idées ?
Merci pour votre aide,
Ekinoks
Partager