emisión estática con boost:: ¿rpp compartido?


¿Cuál es el equivalente de un static_cast con boost::shared_ptr?

En otras palabras, ¿cómo tengo que reescribir lo siguiente

Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);

Cuando se utiliza shared_ptr?

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Author: peterchen, 2009-03-09

4 answers

Use boost::static_pointer_cast:

boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
 104
Author: Frank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-12 09:50:17

Hay tres operadores de cast para punteros inteligentes: static_pointer_cast, dynamic_pointer_cast, y const_pointer_cast. Están en namespace boost (proporcionado por <boost/shared_ptr.hpp>) o namespace std::tr1 (proporcionado por Boost o por la implementación TR1 de su compilador).

 22
Author: Michael Kristofik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-09 03:15:40

Como comentario: si Derived de hecho deriva de Base, entonces debe usar un dynamic_pointer_cast en lugar de casts estáticos. El sistema tendrá la oportunidad de detectar cuando/si su yeso no es correcto.

 3
Author: David Rodríguez - dribeas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-03-09 06:39:58

Vale la pena mencionar que hay diferencia en el número de operadores de casting proporcionados por Boost e implementaciones de TR1.

El TR1 no define el tercer operador const_pointer_cast ()

 2
Author: mloskot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-16 12:23:17