pey*_*man 1 c++ pointers upcasting unique-ptr
假设以下课程
class Base
{
void Doajob(a,b){...}
}
class Derived: public Base
{
void Doanotherjob(a,b,c){...}
}
Run Code Online (Sandbox Code Playgroud)
我已经定义了一个指针如下:
auto ptr= unique_ptr<Base>(new Derived(name));
Run Code Online (Sandbox Code Playgroud)
现在我想使用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
Run Code Online (Sandbox Code Playgroud)
那是不是一件正确的事情?语法是什么?
如果你确定这个垂头丧气是安全的,你可以使用static_cast.
static_cast<derived*>(ptr.get())->DoAnotherJob(...);
Run Code Online (Sandbox Code Playgroud)
但是,如果你进行了DoAnotherJob()虚拟操作base,则不需要进行预测.这是一种更传统的面向对象方法.
如下面的评论中所述,dynamic_cast让我们你做这个演员并验证结果:
if(auto d = dynamic_cast<derived*>(ptr.get())
d->DoAnotherJob();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |