开发者

How to use boost::smart_ptr in polymorphism?

开发者 https://www.devze.com 2023-02-05 21:01 出处:网络
Boost smart pointers can be used with polymorphism, but how do you cast the subclass back to the pointer?

Boost smart pointers can be used with polymorphism, but how do you cast the subclass back to the pointer?

using namespace boost;
// ...
shared_ptr<SuperClass> a_ptr(new SubClass);
// ...
shared开发者_如何学JAVA_ptr<SubClass> b_ptr = (shared_ptr<SubClass>)a_ptr; // Doesn't compile

The last line doesn't compile and gives error C2440: 'type cast' : cannot convert from 'boost::shared_ptr<T>' to 'boost::shared_ptr<T>'


You need to use 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));

(There are also dynamic_pointer_cast and const_pointer_cast for performing dynamic and const casts respectively.)

0

精彩评论

暂无评论...
验证码 换一张
取 消