static_cast
とboost::shared_ptr
の同等物は何ですか?
つまり、次のように書き直す必要がありますか
Base* b = new Derived();
Derived* d = static_cast<Derived*>(b);
shared_ptr
を使用する場合
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = ???
使用する boost::static_pointer_cast
:
boost::shared_ptr<Base> b(new Derived());
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(b);
スマートポインターには、static_pointer_cast
、dynamic_pointer_cast
、およびconst_pointer_cast
の3つのキャスト演算子があります。名前空間boost
(<boost/shared_ptr.hpp>
で提供)または名前空間std::tr1
(BoostまたはコンパイラのTR1実装で提供)にあります。
コメントとして:Derivedが実際にBaseから派生する場合、静的キャストではなくdynamic_pointer_castを使用する必要があります。システムは、キャストが正しくない場合/いつかを検出する可能性があります。
BoostとTR1の実装によって提供されるキャスト演算子の数に違いがあることに言及する価値があります。
TR1は3番目の演算子const_pointer_cast()を定義しません