gpt4 book ai didi

c++ - 可以返回兄弟对象的函数的自动返回类型

转载 作者:行者123 更新时间:2023-11-30 01:34:28 25 4
gpt4 key购买 nike

我有两个继承自 Base 类的类

struct Base
{
virtual ~Base() = default;
};

class Derived_1:public Base
{
public:
void getSomeFunc();
};

class Derived_2:public Base
{
public:
void getSomeFunc();
};

现在我想写一个函数,它接受基类指针对象,在动态转换后找到合适的子对象并返回它,这样我们就可以调用正确版本的 getSomeFunc()

我试着写

auto getChild(Base* ptr)
{
Derived_1 * p = dynamic_cast<Derived_1*>(ptr)
if(p)
{
return p;
}
else
{
Derived_2 * q = dynamic_cast<Derived_2*>(ptr)
if(q)
{
return q;
}
else
{
// some handling to avoid bugs!!
}
}

但是它没有被编译。以任何方式满足我的要求。

编辑 1 ----------------------------------
编译器的错误是 - 'auto' 的不正确推导。编译为gcc

最佳答案

这几乎肯定不是您想要做的。相反,使用虚拟方法:

class Base {
public:
virtual void getSomeFunc() = 0;
// ... etc etc ...
};

然后,你可以写:

Base* ptr = get_a_base_instance_ptr_from_somewhere();
ptr->getSomeFunc();

在您的代码中,您试图拥有 auto 要么 p 的类型或 q 的类型.但是auto只有一个单一类型。和一个可以接受指向 Derived_1 的指针的类型和指向 Derived_2 的指针是……是的,你猜对了:Base* .

编辑:如果您无法更改 Base , Derived_1Derived_2类,你可以考虑使用 std::variant<Derived_1*, Derived_2*> ,并使用访问为这些类型中的每一种调用适当的方法。如果您以前没有使用过变体,请参阅 CPP-reference page on std::variant .有关如何编写用于变体的访问者的信息,请参阅此 SO 问题:

How does std::visit work with std::variant?

关于c++ - 可以返回兄弟对象的函数的自动返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328088/

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