gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:14:57 59 4
gpt4 key购买 nike

承担以下类(class)

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

关于c++ - 如何在 C++ 中使用向上转换的 unique_ptr 指针仅引用在派生类中定义的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29355428/

59 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com