2011-01-21 62 views
6

增強智能指針can be used with 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>'到 '的boost :: 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_castconst_pointer_cast分別執行動態和常規轉換。)

+0

我認爲應該是'dynamic_p ointer_cast`在這種情況下,對吧? – Philipp 2011-01-21 22:43:17

相關問題