Quel est l'équivalent d'un static_cast
avec boost::shared_ptr
?
En d'autres termes, comment dois-je réécrire ce qui suit
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
lors de l'utilisation de shared_ptr
?
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
Utilisation boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
Il existe trois opérateurs de cast pour les pointeurs intelligents: static_pointer_cast
, dynamic_pointer_cast
, et const_pointer_cast
. Ils se trouvent soit dans l'espace de noms boost
(fourni par <boost/shared_ptr.hpp>
) ou l'espace de noms std::tr1
(fourni soit par Boost soit par l'implémentation TR1 de votre compilateur).
En tant que commentaire: si Derived dérive en fait de Base, vous devez utiliser un dynamic_pointer_cast plutôt que des transtypages statiques. Le système aura une chance de détecter quand/si votre distribution n'est pas correcte.
Il convient de mentionner qu'il existe une différence dans le nombre d'opérateurs de casting fournis par Boost et les implémentations de TR1.
Le TR1 ne définit pas le troisième opérateur const_pointer_cast ()