假设以下类
class Base
{
void Doajob(a,b){...}
}
class Derived: public Base
{
void Doanotherjob(a,b,c){...}
}
我定义了一个指针如下:
auto ptr= unique_ptr<Base>(new Derived(name));
现在我想使用ptr指针访问Doanotherjob:
ptr->Doanotherjob(a,b,c); // ERROR
((unique_ptr<Base>) ptr)->Doanotherjob(a,b,c); // ERROR
((unique_ptr<Derived>) ptr)->Doanotherjob(a,b,c); // ERROR
这样做对吗?语法是什么?
如果您确信下变频是安全的,那么可以使用static_cast
。
static_cast<derived*>(ptr.get())->DoAnotherJob(...);
但是,如果在base
中将DoAnotherJob()
设为虚拟,则不必进行下变频。这是一种更加传统的面向对象方法。
正如下面的评论中所说,dynamic_cast
让我们进行这个铸造并验证结果:
if(auto d = dynamic_cast<derived*>(ptr.get())
d->DoAnotherJob();