【发布时间】:2011-08-03 18:30:52
【问题描述】:
假设你有这样的功能:
SmartPtr<A> doSomething(SmartPtr<A> a);
还有这样的课程:
class A { }
class B : public A { }
现在我这样做了:
SmartPtr<A> foo = new B();
doSomething(foo);
现在,我想从doSomething 取回一个SmartPtr<B> 对象。
SmartPtr<B> b = doSomething(foo);
有可能吗?我必须做什么样的演员?
现在,我刚刚发现了一些我认为丑陋的东西:
B* b = (B*)doSomething().get()
重要提示:我无权访问SmartPtr 和doSomething() 代码。
【问题讨论】:
-
你知道 SmartPtr 是从哪里来的吗?有什么文件吗?
-
任何值得称道的智能指针库都将提供专门的强制转换函数来执行此操作。例如在 boost with shared_ptr 它的
boost::shared_ptr<A> b = boost::dynamic_ptr_cast<B>(foo)寻找类似的东西。 -
嗯,这是一个非常基本的 SmartPtr 库,没有任何东西允许动态转换。
标签: c++ inheritance casting smart-pointers