Как сделать static_cast из unique_ptr - PullRequest
0 голосов
/ 11 июля 2020

У меня есть следующий код, как правильно выполнить приведение из 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

1 Ответ

1 голос
/ 11 июля 2020

Вы не можете static_cast a unique_ptr* указатель на IMagneticData* указатель, поскольку они не связаны между собой типами.

Вам вообще не нужно приведение. Поскольку MagEventNotifierAndSupplier является производным от IMagneticData, указатель MagEventNotifierAndSupplier* может быть назначен непосредственно указателю 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...