Bonsoir,
J'ai un petit soucis de "conception", ou de code. J'explique rapidement le problème. Je dispose de plusieurs gestionnaires, tous encapsulés dans plusieurs namespaces :
Les noms des classe ont le même nom car une fonction similaire.
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 namespace A { namespace A1 { class Gestionnaire { }; }; namespace A2 { class Gestionnaire { }; }; namespace A3 { class Gestionnaire { }; }; ... };
Je dispose ensuite d'une classe qui possède une instance vers chacune de ces classes :
Ainsi qu'un enum contenant les différents types. Ce que je voudrais faire, c'est plutôt que d'avoir plusieurs fonctions, avoir une seule fonction qui me renverait une référence de l'objet approprié suivant la valeur de la constante passée, comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Generale { private: A::A1::Gestionnaire gest1; A::A2::Gestionnaire gest2; A::A3::Gestionnaire gest3; ... };
Ca marche bien si je n'en mets qu'un seul, et que je spécifie explicitement par exemple const A::A1::Gestionnaire & getGestionnaire (monEnum enum) const, mais j'aimerais utiliser cette méthode sans avoir créer plein de petites fonctions comme ça. J'ai essayé du côté de boost::any en faisant quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 const Gestionnaire & getGestionnaire (monEnum enum) const { switch (enum) { case '1': return gest1; ... }; }
Mais ça ne fonctionne pas :/. Si quelqu'un a une idée je suis preneur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 const boost::any & getGestionnaire (monEnum enum const) { ... return boost::any_cast<A::A1::Gestionnaire> (gest1); ... }
Partager