Transtypage via static_cast, au secours !
Bonjour à tous.
Dans le cadre d’un problème d’intégration à un ensemble applicatif préexistant je suis confronté au problème suivant de réécriture d’un constructeur de copie :
Je travaille sur une classe A et sur une classe B, avec l’indication que B est une classe virtuelle pure que j’instancie via une classe template. J’ai donc indicativement:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| Class B //une classe virtuelle
{
protected:
//variables
public:
virtual Void do_work()=0;
};
Template <typename implémentation "utile" de la classe
Class VeryB: public B
{
public:
VeryB() //constructeur par défaut
{}
VeryB(_variables)
{
//affectations diverses
}
};
class WorkingB: public VeryB<WorkingB>
{
WorkingB() //le constructeur vide
{}
WorkingB(_variables)
:VeryB<WorkingB>(_variables)
{
//affectations diverses
}
void do_work()
{
return;
//un traitement
}
//recopie
WorkingB(_variables)
}; |
J'ai maintenant ma classe de mise en œuvre :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class A()
{
private:
//des variables
//et :
B* bObj;//A opèrera notamment sur un représentant de B
public:
A() //le constructeur vide
{}
A(paramètres)
{
bObj=new WorkingB(paramètres); //construction de la bonne instance (spécialisation) de B
//etc
}
//ET MON PROBLEME, AU NIVAU DE LA RECOPIE;
A(const &objToCopy)
{
//différentes recopies icis, mais pour le cas du pointeur sur classe abstraite B?
//si B avait été une classe standard, j'aurais fait :
bObj=new B(*objtocopy));
}
} ; |
Je pensais faire une chose du genre (mais je sais que c’est faux écrit comme ça, c’est juste pour donner l’esprit):
bObj=new static_cast<VeryB>VeryB(*objtocopy>));
L’idée c’est donc que quand j’appelle le constructeur de copie de A, il retrouve le type de la classe implémentée pour B et qu’il me construise bObj à l’aide du pointeur sur le bon constructeur.
Est-ce que je suis sur une voie, voyez-vous une solution?
Merci