static_cast com boost :: shared_ptr?
-
05-07-2019 - |
Pergunta
Qual é o equivalente a um static_cast
com boost::shared_ptr
?
Em outras palavras, como eu tenho que reescrever o seguinte
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
Ao usar shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Solução
Usar boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Outras dicas
Existem três operadores de elenco para ponteiros inteligentes: static_pointer_cast
, dynamic_pointer_cast
, e const_pointer_cast
. Eles estão no espaço para nome boost
(fornecido por <boost/shared_ptr.hpp>
) ou espaço para nome std::tr1
(fornecido pelo Boost ou pela implementação TR1 do seu compilador).
Como comentário: Se derivado, de fato deriva da base, você deve usar um dinâmico_pointer_cast em vez de elencos estáticos. O sistema terá uma chance de detectar quando/se o seu elenco não estiver correto.
Vale mencionar que há diferença no número de operadores de fundição fornecidos pelo Boost e implementações do TR1.
O TR1 não define o terceiro operador const_pointer_cast ()