Search code examples
c++polymorphismboost-any

Boost::any and polymorphism


I am using boost::any to store pointers and was wondering if there was a way to extract a polymorphic data type.

Here is a simple example of what ideally I'd like to do, but currently doesn't work.

struct A {};

struct B : A {};

int main() {

    boost::any a;
    a = new B();
    boost::any_cast< A* >(a);
}

This fails because a is storing a B*, and I'm trying to extract an A*. Is there a way to accomplish this?

Thanks.


Solution

  • The other way is to store an A* in the boost::any and then dynamic_cast the output. Something like:

    int main() {
        boost::any a = (A*)new A;
        boost::any b = (A*)new B;
        A *anObj = boost::any_cast<A*>(a);
        B *anotherObj = dynamic_cast<B*>(anObj); // <- this is NULL
    
        anObj = boost::any_cast<A*>(b);
        anotherObj = dynamic_cast<B*>(anObj); // <- this one works!
    
        return 0;
    }