将基础 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() {}
};
如果您确定转换结果,您也可以使用 static_cast
。
我需要将我的基础 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() {}
};
如果您确定转换结果,您也可以使用 static_cast
。