gpt4 book ai didi

c++ - 映射中的派生类

转载 作者:行者123 更新时间:2023-11-28 07:46:43 26 4
gpt4 key购买 nike

我有两个独立的类层次结构,从BaseClass1开始,BaseClass2

这就是我想要做的:

struct BaseClass1 {
virtual void obtain_map(std::map<int,BaseClass2> &map) = 0;
}

BaseClass1 的子类覆盖了 obtain_map。但问题是那些子类应该能够在 map 参数中使用 BaseClass2 的子类。 (所以从这个意义上说,两个“独立”层次结构的子类实际上是相关的,或者更确切地说,如果子类设计者愿意的话,可以是相关的)

我怎样才能做到这一点,还是我必须从头开始创建自己的 map 类?

最佳答案

如果您像这样派生您的类并使用指针作为第二个 map 模板参数(像 std::unique_ptr 这样的智能指针将为您省去一些内存管理麻烦) :

struct BaseClass1 {
virtual void obtain_map(std::map<int, std::unique_ptr<BaseClass2>> &map) = 0;
};
struct DerivedClass1 : public BaseClass1 {
virtual void obtain_map(std::map<int, std::unique_ptr<BaseClass2>> &map) override
{
}
};

您仍然可以将 BaseClass2 的派生版本作为第二种类型传入 maps:

struct DerivedClass2 : public BaseClass2;
// ...

std::map<int, std::unique<DerivedClass2>> mdc2;
DerivedClass1 dc1;
dc1.obtain_map(mdc2);

关于c++ - 映射中的派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14783294/

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