2011-01-21 7 views
6

スマートポインタをブーストするcan be used with polymorphismしかし、サブクラスをどのようにポインタにキャストするのですか?polymorphismでboost :: smart_ptrを使うには?

using namespace boost; 
// ... 
shared_ptr<SuperClass> a_ptr(new SubClass); 
// ... 
shared_ptr<SubClass> b_ptr = (shared_ptr<SubClass>)a_ptr; // Doesn't compile 

最後の行が後押し 'から 'error C2440: 'type cast' : cannot convert from 'boost::shared_ptr<T>をコンパイルし、与えていない:: shared_ptrの<T>'

答えて

12

あなたはstatic_pointer_castを使用する必要があります。

struct B { virtual ~B() { } }; 
struct D : B { }; 

shared_ptr<B> bp(new D); 
shared_ptr<D> dp(static_pointer_cast<D>(b)); 

dynamic_pointer_castもありますし、 const_pointer_castそれぞれの動的キャストとconstキャストを実行します)。

+0

私は 'dynamic_pこの場合はointer_cast'、そうですか? – Philipp

+0

コンパイル時に型が<>で指定された型であるかどうかが不明な場合。それ以外の場合はboost :: static_pointer_castを使用してください。 –

関連する問題