Afficher un message
Vieux 30/04/2008, 01h59   #1
Mickaël Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Gestion de l'assignation consanguine

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
  Réponse avec citation
 
Page generated in 0,06780 seconds with 9 queries