SmartPointer:在基类和派生类之间进行转换

Ant*_*ine 4 c++ inheritance casting smart-pointers

假设你有这样的功能:

SmartPtr<A> doSomething(SmartPtr<A> a);
Run Code Online (Sandbox Code Playgroud)

像这样的类:

class A { }
class B : public A { }
Run Code Online (Sandbox Code Playgroud)

现在我这样做:

SmartPtr<A> foo = new B();
doSomething(foo);
Run Code Online (Sandbox Code Playgroud)

现在,我想从中取回一个SmartPtr<B>物体doSomething.

SmartPtr<B> b = doSomething(foo); 
Run Code Online (Sandbox Code Playgroud)

可能吗 ?我需要做什么样的铸造?
现在,我发现了一些我认为难看的东西:

B* b = (B*)doSomething().get()
Run Code Online (Sandbox Code Playgroud)

重要说明:我没有任何访问权限SmartPtrdoSomething()代码.

BЈо*_*вић 8

而不是这样做,你可以这样做:

B *b = dynamic_cast< B* >( doSomething.get() );
Run Code Online (Sandbox Code Playgroud)

但你必须检查b是否为NULL.