假设你有这样一个函数:
SmartPtr<A> doSomething(SmartPtr<A> a);
像这样的类:
class A { }
class B : public A { }
现在我这样做:
SmartPtr<A> foo = new B();
doSomething(foo);
现在,我想取回一个 SmartPtr<B>
来自 doSomething
的对象.
SmartPtr<B> b = doSomething(foo);
这可能吗?我需要做什么样的选角?
现在,我刚发现一些我认为丑陋的东西:
B* b = (B*)doSomething().get()
重要说明:我无权访问 SmartPtr
和 doSomething()
代码。
最佳答案
除了这样做,你还可以这样做:
B *b = dynamic_cast< B* >( doSomething.get() );
但是你必须检查 b 是否为 NULL。
关于c++ - 智能指针 : cast between base and derived classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5633695/