std::dynamic_pointer_cast细节用法
關于std::dynamic_pointer_cast的使用,只適合具有繼承關系的使用,比如
class D:public B
{
};
如果,B的指針指向D時,想用D里面的函數,而在B里面沒有時,我們就會使用std::dynamic_pointer_cast函數,但是,這只適合shared_ptr,不適合std::unique_ptr,因為c++標準庫根本沒實現。所以要自己實現一個。
實現細節:
template <typename To, typename From, typename Deleter>
std::unique_ptr<To, Deleter> dynamic_unique_cast(std::unique_ptr<From, Deleter>&& p) {
?? ?if (To* cast = dynamic_cast<To*>(p.get()))
?? ?{
?? ??? ?std::unique_ptr<To, Deleter> result(cast, std::move(p.get_deleter()));
?? ??? ?p.release();
?? ??? ?return result;
?? ?}
?? ?return std::unique_ptr<To, Deleter>(nullptr); // or throw std::bad_cast() if you prefer
}
總結:估計c++標準庫不去實現,是可能違背了std::unique_ptr 的唯一性,以上,函數只適合研究學習。不建議,用在真正的項目里面
總結
以上是生活随笔為你收集整理的std::dynamic_pointer_cast细节用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven报错Non-resolvabl
- 下一篇: CAS实现原子操作的三大问题