Bonjour,
Si on a les trois classes suivantes :
class A
{
public:
virtual A & operator=(A const & rvalue) ;
/* ... */
} ;
class B0 : public A
{
public:
virtual A & operator=(B0 const & rvalue) ;
/* ... */
} ;
class B1 : public A
{
public:
virtual A & operator=(B1 const & rvalue) ;
/* ... */
} ;
Dans l'usage suivant :
B0 b0 ;
B1 b1 ;
A & b0_a = static_cast<A &>(b0) ;
b1 = b0_a ;
Dans la pratique, comment devrais-je gérer une telle affectation ?
Lever une exception car c'est un non sens ? Et surtout, comment je le
détecte dans l'affectation ? La solution la plus directe que je vois
dans le cas où on gère est un dynamic_cast dans B0:

perator=(A const
&). J'avoue que je serais partisan de rendre l'opération silencieuse,
mais je risque de me surprendre, en perdant des information lors
d'affectations.
Que faites-vous pratiquement dans ce cas ?
Merci !
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org