static_cast
withに相当するものは何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_cast
withに相当するものは何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() を定義していません