Bonjour à tous,
Je dispose du code suivant :
Je voudrais bien entendu que la ligne
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 class B0 { ... }; class B1: public B0 { ... }; class A0 { public: virtual void fun(const B0& b0); virtual void fun(const B1& b1); }; class A1: public A0 { public: void fun(const B1& b1); }; int main(int argc, char **argv) { A0 *a1 = new A1; B0 *b1 = new B1; a1->fun(*b1); delete b1; delete a1; }
appelle la fonction fun de A1 prenant comme argument un objet de type B1... ce qui n'est pas le cas quand j'exécute ce code puisque c'est la fonction fun de A0 prenant comme argument un objet de type B0 qui est exécutée. Je précise ici que, comme dans le code simple présenté ici, je manipule également dans mon "vrai" code une collection d'objet de types parents A0 et B0 dont je ne connais pas forcément à l'avance le sous-type... La solution que j'ai trouvée pour le moment passe par la surcharge de la fonction virtuelle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 a1->fun(*b1);
de A0 dans A1, puis à l'intérieur de celle-ci, d'utiliser le RTTI pour appeler effectivement la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 virtual void fun(const B0& b0);
Cependant je ne trouve pas ça très propre et je me demandais s'il n'existait pas de solution plus jolie... Merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void fun(const B1& b1);
Partager