c++ - static_cast con boost:: shared_ptr?
shared-ptr static-cast (4)
¿Cuál es el equivalente de un static_cast
con boost::shared_ptr
?
En otras palabras, ¿cómo tengo que reescribir el siguiente
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
cuando se usa shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Como comentario: si Derived deriva de Base, entonces debes usar un dynamic_pointer_cast en lugar de cast de estática. El sistema tendrá la posibilidad de detectar cuándo / si su lanzamiento no es correcto.
Hay tres operadores de static_pointer_cast
para punteros inteligentes: static_pointer_cast
, dynamic_pointer_cast
y const_pointer_cast
. Están en el espacio de nombres boost
(proporcionado por <boost/shared_ptr.hpp>
) o espacio de nombres std::tr1
(proporcionado por Boost o por la implementación TR1 de su compilador).
Utilice boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Vale la pena mencionar que existe una diferencia en el número de operadores de casting proporcionados por Boost y las implementaciones de TR1.
El TR1 no define el tercer operador const_pointer_cast ()