Y at-il un moyen en C++ pour construire votre classe de telle sorte que, vu un pointeur sur votre classe, vous pouvez indiquer à dynamic_cast <>() comment transtyper dans une autre classe pour laquelle vous encapsulez l'implémentation? Est-ce que l'opérateur pourrait faire l'affaire? Imaginons que je possède une classe de base d'interface abstraite et que j'en dérive un concreteA ainsi que concreteB, mais concreteB enveloppe l'interface à un objet de type concreteA. Si je reçois une demande de jeter à concreteA de concreteA, je voudrais que cela fonctionne:Puis-je enseigner dynamic_cast <>() de nouveaux trucs?
class Abstract {
public:
virtual void interface() = 0;
};
class concreteA : public Abstract {
public:
virtual void interface();
};
class concreteB : public Abstract {
public:
concreteB(concreteA &underlying)
: _underlying(&underlying) {
}
virtual void interface();
operator concreteA*() {
return _underlying;
}
private:
concreteA *_underlying;
};
void
myTest() {
concreteA myClassA;
concreteB myClassB(myClassA);
Abstract *abstract = &myClassB;
concreteA *underlying = dynamic_cast<concreteA *>(abstract);
}