
2008/12/23 Vincent Agnus <vincent.agnus@ircad.fr>:
Igor R wrote:
2008/12/23 Jason Cipriani <jason.cipriani@gmail.com>:
If I have:
class Base { }; class Derived : public Base { };
And a container, e.g.:
std::vector<boost::shared_ptr<Base> > objs;
How do I downcast to a shared_ptr<Derived>? E.g.:
boost::shared_ptr<Derived> d = (boost::shared_ptr<Derived>)objs[0];
Look at boost::static_pointer_cast
using class polymorphism boost::dynamic_pointer_cast is better.
Thanks, this is exactly what I wanted. Jason
You can also iterate on our vector as if the elements are of type Derivated with a code like this :
typedef std::vector<boost::shared_ptr<Base> > VectorBase;
template < class SubClass> struct DownCaster : public std::unary_function< boost::shared_ptr< Base >, boost::shared_ptr< SubClass> > { boost::shared_ptr< SubClass> operator()( boost::shared_ptr< Base > obj ) const { return boost::dynamic_pointer_cast< SubClass >( obj ); } };
typedef typename boost::transform_iterator< DownCaster<Derived> , VectorBase::iterator > CastIterator;
CastIterator start( objs.begin() );
boost::shared_ptr<Derived> d = *start; // is OK
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users