static_castwithに相当するものは何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 = ???
static_castwithに相当するものは何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);
スマート ポインターには、 、 、および の 3 つのキャスト演算子がstatic_pointer_castありdynamic_pointer_castますconst_pointer_cast。それらは名前空間boost( によって提供される<boost/shared_ptr.hpp>) または名前空間std::tr1(Boost またはコンパイラの TR1 実装によって提供される) のいずれかにあります。
コメントとして: Derived が実際に Base から派生している場合は、静的キャストではなく dynamic_pointer_cast を使用する必要があります。システムは、キャストが正しくない場合を検出する可能性があります。
Boost と TR1 の実装によって提供されるキャスト オペレータの数に違いがあることに注意してください。
TR1 は 3 番目の演算子 const_pointer_cast() を定義していません