C++ 如何从unique_ptr进行静态_强制转换

C++ 如何从unique_ptr进行静态_强制转换,c++,casting,unique-ptr,static-cast,C++,Casting,Unique Ptr,Static Cast,我有以下代码,如何正确地从unique_ptr转换为基类?: class MagEventNotifierAndSupplier : public CSubject, IMagneticData { public: //implement } unique_ptr<MagEventNotifierAndSupplier> m_MagEventNotifierAndSupplier; m_MagEventNotifierAndSupplier = make_unique<

我有以下代码,如何正确地从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
class MagEventNotifier and Supplier:公共CSubject,
iMagneticCDATA
{
公众:
//实施
}
唯一的\u ptr m\u MageVentNotifier和Supplier;
m_mageventnotifier and supplier=使_独一无二(“测试”);
iMagneticATA*数据=static_cast(&m_mageventnotifier and supplier);//无效演员阵容

您不能将
静态\u cast
a
唯一\u ptr*
指针指向
iMagneticCDATA*
指针,因为它们是不相关的类型

你根本不需要演员阵容。由于
mageventnotifier和supplier
源自
imamagneticdata
,因此
mageventnotifier和supplier*
指针可以直接分配给
IMagneticData*
指针,而无需强制转换

您可以通过
get()
方法从
std::unique\u ptr
对象获取
mageventnotifier和supplier*
指针,例如:

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

auto m_MagEventNotifierAndSupplier = std::make_unique<MagEventNotifierAndSupplier>("test");
IMagneticData* data = m_MagEventNotifierAndSupplier.get();
class-mageventnotifier和supplier:public-CSubject,public-IMagneticData
{
公众:
//实施
};
自动m_mageventnotifier and supplier=std::make_unique(“测试”);
iMagneticATA*data=m_mageventNotifier和supplier.get();

您是否尝试过:imagenticata*动态\u转换(m\u mageventnotifier和supplier.get())您是否打算使用私有继承?为什么选择动态\u转换?它用于将基指针强制转换为派生类。您应该能够轻松地获得指向基类的指针,而无需任何显式强制转换。只需使用unique_ptr类的get()方法。iMagneticATA*data=m_mageventNotifier和supplier.get();2.切换到公共继承,即类mageventnotifier和supplier:public CSubject、public IMagneticData。