映射中的派生类
derived classes in maps
我有两个独立的类层次结构,从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);
std::map<int,BaseClass2>
,则对象将被切片为BaseClass2类型。
如果您希望std::map
存储BaseClass2的子类,则需要在映射中存储指针(智能指针)。
例如:
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)
{
// implementation
}
}
存储smpart指针与原始指针相比有进步,因为您不需要手动删除指针指向的内存。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 将派生类传递到映射 c++ 中
- C++通过映射并使用中的方法从基类实现派生类
- 使用具有抽象基类指针的映射并调用派生类函数
- 派生函数的映射
- 使用派生类的向量映射调用其类的函数
- 使用派生类的向量映射
- 派生类的映射
- 将派生类作为值放入STL映射中
- 如何通过映射实例化派生类中的对象
- 将Qt基类信号映射到派生类中的槽
- 映射一个c++模板派生类
- 在c++中使用映射器处理派生类的创建
- 我可以将引用传递给映射,其中数据是指向派生类的指针吗?
- 映射中的派生类