J'utilise boost :: any pour avoir des types polymorphes, j'ai besoin de pouvoir convertir un objet en son type de base.comment utiliser boost :: any_cast (bibliothèque c + + +) pour convertir les types de base?
class A {
public:
int x;
virtual int foo()= 0;
};
class B : public A {
public:
int foo() {
return x + 1;
}
};
int main() {
B* bb = new B();
boost::any any = bb;
bb->x = 44;
A* aa = boost::any_cast<A*>(any);
}
Le code de la fonction principale jette l'erreur suivante lors de l'exécution:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >'
what(): boost::bad_any_cast: failed conversion using boost::any_cast
Abort trap
Si je change le static_cast dans le boost :: any_cast code pour reinterpret_cast il semble fonctionner. Cependant, je ne suis pas sûr des conséquences de cela.
Avez-vous des idées?
tout objet de stockage par valeur et le supprime – Sergei