如何在C++中使用上转换unique_ptr指针引用仅在派生类中定义的方法



假设以下类

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();

相关内容

  • 没有找到相关文章

最新更新