c++ - 如何从 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
解决方案
您不能指向指针,因为它们是不相关的类型static_cast
。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();
推荐阅读
- asp.net-core - 如果我想要一个单独的 Web api,但仍然在服务器端运行,然后在客户端运行,该选择哪个项目模板?
- excel - 如何有效地编写代码以访问 VBA 中的全局命名范围
- vega - 修改规范中的 Vega 工具提示以显示特定字段
- c# - FakeItEasy 在构造函数中使用带有参数的自定义属性伪造抽象类抛出 ArgumentException
- python-3.x - Python:根据条件在语句(类对象)周围打印括号
- c# - 如何验证一个值是否实际在发布请求正文中发送?
- javascript - 如何根据屏幕宽度定义变量?
- javascript - $emit 和 $on 奇怪的行为 - Vue2
- haskell - 如何修复:ghci 中字符 '"' 处的字符串/字符文字中的词法错误
- flutter - 从 DropdownItems 中选择值后,DropdownButton 值未更新。如何使用 selectedValue 更新默认值?