Effectivement, tu ne peux pas faire de static_cast ou C-style cast entre 2 classes qui n'héritent pas l'une de l'autre, le seul moyen (sans RTTI) est de passer par la classe fille commune:
B *b = (B *)(A *)c;
Jyaif Le 21/08/2010 à 00:33 Arf, OK ça ne m'arrange pas du tout ça!
Merci bien.
Attends, il y a quand-même une autre solution qui me vient à l'esprit: l'abus de virtual: dans la classe C, tu déclares virtual void B* cast_to_B() {return 0;} (pas besoin de la définition de B pour ça, un class B; suffit normalement), et dans A, tu le redéfinis en virtual void B* cast_to_B() {return (B*)this;}. Ensuite, tu peux utiliser B *b = c->cast_to_B();.
Ça peut aussi se varier, à la limite même avec une fonction cast universelle qui prend le type en tant que chaîne de caractères, à la QObject (mais QObject lui-même ne permet pas l'héritage multiple), ou en tant qu'ID numérique, et qui retourne un void * qu'il faut après recaster en le bon type.