2013-01-23 50 views
2

我熟悉的升壓轉換器的polymorphic_cast正常指針:多態性與投下的boost :: shared_ptr的

Base *base; 

Derived *d = boost::polymorphic_cast<Derived>(base); 

但是,如何與boost::shared_ptr,而不是使用它呢?

boost::shared_ptr<Base> base; 

boost::shared_ptr<Derived> d = boost::?????(base); 

回答

2

使用boost::static_pointer_castboost::dynamic_pointer_cast,作爲C++的類似物蒙上static_castdynamic_cast

boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(base); 

// now "d" shares ownership with "base" 

這只是執行對底層的原始指針各自的鑄造。

(同樣是真實在C++ 11標準庫中的std命名空間和在TR1庫中的std::tr1名稱­空間C++ 03)

+0

感謝。沒有'boost :: polymorphic_pointer_cast <>'?我想只是使用動態和寫明確聲明.... – Roddy

+0

@羅迪:不是我的知識。但是如果你需要檢查成功的話,你總是可以說'if(auto p = boost :: dynamic_pointer_cast (base)){/ * ... * /}'。 –

+0

相反呢?我想要通用代碼使用shared_ptr 並從派生類中調用它派生shared_ptr ... –

相關問題