Bonjour à tous,

je me retrouve dans cette situation :

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
class Base
{
 int m_a;
 virtual void f() = 0;
};
 
 
class Derivee1 : public Base
{
  void f();
  int m_data;
};
 
class Derivee2 : public Base
{
  void f();
  int m_size;
};
 
class Type
{
   Base* m_p;
   int m_id;
   ...
 
};
 
class Test
{
  list<Type*> m_list;
  Derivee1* GetPtrByIdType(int idType);
};

La liste m_list de la classe Test est construite avec des Type* dont le m_p est un Derivee1*.
Ainsi, pour récupérer le m_p, j'utilise la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Derivee1* Test::GetPtrByIdType(int idType);
Comment faire pour que dans ma fonction GetPtrByIdType() je n'ai pas de downcasting à faire ?
En effet ma recherche par id me retourne un Base* que je dois caster en Derivee1*.

Je ne trouve pas ça trés propre.
Quelle est la solution à conseiller ?

@+