2

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);
4

1 回答 1

2

使用boost::static_pointer_castor boost::dynamic_pointer_cast,作为 C++ 强制转换的类似物static_castdynamic_cast

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

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

这只是对底层原始指针执行相应的转换。

stdC++11 标准库中的std::tr1命名空间和 C++03 的 TR1 库中的命名空间也是如此。)

于 2013-01-23T22:02:10.387 回答