首页 > 解决方案 > 如何从 unique_ptr 制作 static_cast

问题描述

我有以下代码,如何正确地从 unique_ptr 转换为基类?:

class MagEventNotifierAndSupplier : public CSubject,
    IMagneticData
{
public:
//implement
}
unique_ptr<MagEventNotifierAndSupplier> m_MagEventNotifierAndSupplier;
m_MagEventNotifierAndSupplier = make_unique<MagEventNotifierAndSupplier>("test");
IMagneticData* data= static_cast<IMagneticData*>(&m_MagEventNotifierAndSupplier);// invalid cast

标签: c++castingunique-ptrstatic-cast

解决方案


您不能指向指针,因为它们是不相关的类型static_castunique_ptr*IMagneticData*

你根本不需要演员表。由于MagEventNotifierAndSupplier派生自IMagneticDataMagEventNotifierAndSupplier*因此可以将指针直接分配给IMagneticData*指针而无需强制转换。

您可以通过其方法MagEventNotifierAndSupplier*从对象中获取指针,例如:std::unique_ptr<MagEventNotifierAndSupplier>get()

class MagEventNotifierAndSupplier : public CSubject, public IMagneticData
{
public:
    //implement
};

auto m_MagEventNotifierAndSupplier = std::make_unique<MagEventNotifierAndSupplier>("test");
IMagneticData* data = m_MagEventNotifierAndSupplier.get();

推荐阅读