如何从基类的唯一指针获取子类的成员
How do I get member of child class from unique pointer to base class?
我有一个对象,它被存储为映射中基类的unique_ptr。
class Base
{
int foo;
};
map <string, unique_ptr<Base> > Objects;
然而,这些对象实际上属于不同的子类。
class Child1 : public Base
{
int bar1;
};
class Child2 : public Base;
{
int bar2;
};
Objects.insert(make_pair("Child1", unique_ptr<Base>(new Child1())));
Objects.insert(make_pair("Child2", unique_ptr<Base>(new Child2())));
现在,在代码的某个远处,我想访问Child1的一个成员变量,它是该类唯一的。
cout << "Bar1 is:" << Objects["Child1"]->bar1 << endl;
但我得到了错误:
ERROR: 'class Base' has no member 'bar1'
因此,我尝试使用dynamic_cast,但当然,您不能在unique_ptr上使用dynamic_cast。
那么我该怎么办呢?
-
从
unique_ptr
中获取一个指向基类的指针。Base* basePtr = Objects["Child1"].get();
-
对指针执行
dynamic_cast
。Child1* child1Ptr = dynamic_cast<Child1*>(basePtr);
-
访问
Child1
类的成员。if ( child1Ptr != nullptr ) { // ... Use child1Ptr }
请确保您制作了基类virtual
的析构函数。否则,当unique_ptr
s被析构函数时,派生类的析构函数将永远不会被调用。此外,正如@AndyG在评论中所观察到的,如果没有任何虚拟函数,dynamic_cast
将无法工作。
class Base
{
public:
virtual ~Base(){}
private:
int foo;
};
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- C++ 如何从虚拟类的模板化子类中获取数据?
- 在子类上调用模板化静态方法时获取类的类型名
- 获取参数的子类
- 类来获取 Base 的任何子类
- 使用子类从std :: Pironity_queue获取容器时会编译错误
- 基于className的字符串为QObject的子类获取QMetaObject
- 在Qt中获取超类中的子类的名称
- 使用shared_ptr时获取子类的type_info
- 如何从基类的唯一指针获取子类的成员
- 子类获取超类私有变量c++
- 获取定义为父类的子类以输出子函数
- 在窗口循环中,在窗口控件上获取鼠标移动比子类化更容易
- 获取 QWidget 的 Windows 消息而不对其进行子类化并重新实现 QWidget::winEvent
- 如何在c++中获取子类成员