C++ 如何从unique_ptr进行静态_强制转换
我有以下代码,如何正确地从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<
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。