将基础 class unique_ptr 转换为派生 class unique_ptr

convert base class unique_ptr to derived class unique_ptr

我需要将我的基础 class unique_ptr 转换为派生 class unique_ptr 以便我可以访问派生 class 的一些功能].

我的代码抛出错误。 这是怎么回事?

#include <iostream>
#include <memory>

class Base
{};

class Derived : public Base
{
  public:
  Derived(int x):_x(x){}
  
  int oneDerivedClassFunction()
  {    return _x;  }
  
  private: 
    int _x;
};

int main()
{
    std::unique_ptr<Base> basePtr;
    basePtr.reset(new Derived(10));
    
    auto der = std::unique_ptr<Derived>(dynamic_cast<Derived*>(basePtr.release())); // error here!
    printf("%d", der->oneDerivedClassFunction());
    return 0;
}

问题是 dynamic_cast 不能用于非 polymorphic types

根据您的意图,您可以使 Base 多态,例如

class Base
{
  public:
  virtual ~Base() {}
};

LIVE

如果您确定转换结果,您也可以使用 static_cast

LIVE