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 = ???
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);
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).
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.
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 ()
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