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)
重要说明:我没有任何访问权限SmartPtr和doSomething()代码.
而不是这样做,你可以这样做:
B *b = dynamic_cast< B* >( doSomething.get() );
Run Code Online (Sandbox Code Playgroud)
但你必须检查b是否为NULL.