我熟悉普通指针的boost polymorphic_cast
:
Base *base;
Derived *d = boost::polymorphic_cast<Derived>(base);
但是,如何将它与boost::shared_ptr
一起使用?
boost::shared_ptr<Base> base;
boost::shared_ptr<Derived> d = boost::?????(base);
答案 0 :(得分:2)
使用boost::static_pointer_cast
或boost::dynamic_pointer_cast
作为C ++演员static_cast
和dynamic_cast
的类似物:
boost::shared_ptr<Derived> d = boost::static_pointer_cast<Derived>(base);
// now "d" shares ownership with "base"
这只是对底层原始指针执行相应的强制转换。
(在C ++ 11标准库的std
命名空间和C ++ 03的TR1库中的std::tr1
命名空间也是如此。)