gpt4 book ai didi

c++ - 如何从指向基类的唯一指针获取子类成员?

转载 作者:行者123 更新时间:2023-11-28 00:19:02 25 4
gpt4 key购买 nike

我有一个对象,它作为基类的 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。

那我该怎么办呢?

最佳答案

  1. unique_ptr 获取指向基类的指针。

    Base* basePtr = Objects["Child1"].get();
  2. 对指针执行 dynamic_cast

    Child1* child1Ptr = dynamic_cast<Child1*>(basePtr);
  3. 访问 Child1 类的成员。

    if ( child1Ptr != nullptr )
    {
    // ... Use child1Ptr
    }

确保将基类的析构函数设为 virtual。否则,当 unique_ptr 被析构时,派生类的析构函数将永远不会被调用。此外,正如@AndyG 在评论中所观察到的,dynamic_cast 将无法在没有任何虚函数的情况下工作。

class Base
{
public:
virtual ~Base(){}

private:
int foo;
};

关于c++ - 如何从指向基类的唯一指针获取子类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28505409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com