繁体   English   中英

可以返回同级对象的函数的自动返回类型

[英]auto return type of a function which can return an object of sibling

我有两个从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 ----------------------------------
来自编译器的错误是- incorrect deduction of '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_1的指针的Derived_2是...是的,您猜对了: Base*

编辑:如果您无法更改BaseDerived_1Derived_2类,则可以考虑使用std::variant<Derived_1*, Derived_2*> ,并使用访问来为每种类型调用适当的方法。 如果您以前没有使用过变体,请参阅std::variantCPP参考页面 有关如何编写用于变体的访问者的信息,请参见以下SO问题:

std :: visit如何与std :: variant一起使用?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM