aze Le 15/03/2008 à 21:54 enfin je veux bien dire que A est pote avec toutes ses classes dérivées (pasque A est sympa), mais pas juste B ^^
Zeph Le 15/03/2008 à 21:56 uep je vois le problème, mais à part des trucs immondes style "((B*)&a)->m = 0;", je ne connais pas de solution ^^

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
aze Le 15/03/2008 à 22:19 Par contre, à propos de ce hack, si je caste en B* un objet qui est en fait de type C, lui aussi dérivé de A, est ce que ça pourrait planter ? Je dirais que non, puisque je n'accède qu'à la partie définie dans la classe A, mais j'en suis pas sûr.
Zeph Le 15/03/2008 à 22:50 bonne question, à partir du moment où tu touches quelque chose qui est contenu dans A, je suppose que quelle que soit la classe dérivée à laquelle appartient la variable que tu utilises il n'y a pas de problème, mais ça reste à confirmer ^^
(enfin le contraire me semblerait étonnant, et engendrerait surtout un beau bordel)

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Zeph Le 16/03/2008 à 02:25 uep, en tout cas g++ a l'air de toujours procéder de cette façon; après je sais pas si c'est juste son comportement ou si c'est écrit dans une quelconque norme ^^

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
reinterpret_cast<B*>(static_cast<A*>(a)).m est plus sûr (pour l'héritage multiple justement). Et avec g++, il faudra probablement compiler avec -fno-strict-aliasing (ou déclarer B avec __attribute__((may_alias))) aussi, d'autres compilateurs pourraient aussi nécessiter quelque chose du même type.
Le static_cast est redondant effectivement, il sera déjà effectué quand tu affectes l'objet à ton A*.
Effectivement, ça m'a l'air beaucoup plus propre que le hack qu'on avait proposé.