en fait, une list de n'importe quoi contient précisément des valeurs de ce type-là.
Ces valeurs sont initialisés en appelant un des constructeurs (constructeur de copie pour push_back, un constructeur compatible dans le cas de emplace_back).
Ainsi, une list<IP_PACKET> contient des IP_PACKET, pas des classes de bases.
Quand tu appelles liste.push_back(dérivée);, un IP_PACKET est ajouté à liste, sa valeur est celle la même que si tu créais la variable
IP_PACKET copie(dérivée);
.
C'est le phénomène de slicing.
Pour avoir une liste d'objets dérivés, il faut une liste d'objets dérivés, ou éventuellement une liste de pointeurs vers des objets de base (mais auquels cas, tu peux avoir d'autres types que ton type dérivé).
Un cast vers une classe dérivée signifie pratiquement toujours que tu as perdu trop tot une information.
La faute est généralement celle de la fonction qui retourne la liste.
Partager