Boost smart pointers can be used with polymorphism, but how do you cast the subclass back to the pointer?
using namespace boost; // ... shared_ptr
You need to use static_pointer_cast:
static_pointer_cast
struct B { virtual ~B() { } }; struct D : B { }; shared_ptr<B> bp(new D); shared_ptr<D> dp(static_pointer_cast<D>(b));
(There are also dynamic_pointer_cast and const_pointer_cast for performing dynamic and const casts respectively.)
dynamic_pointer_cast
const_pointer_cast