在基类矢量中存储儿童的地图

时间:2017-04-24 06:31:20

标签: c++ vector maps

我目前正在尝试将多个<int, Derived>地图存储在基类的矢量中。

示例:

std::map<int, Derived_1 *> map_1 = smth;
std::map<int, Derived_2 *> map_2 = smth_else;

std::vector<std::map<int, Base *>> list;

list.push_back(map_1);
list.push_back(map_2);

但是,在编译时我得到的错误是派生地图和基类之间没有转换。

有没有更好的(或简单的工作)方法来解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:3)

不,没有办法直接实现,因为std::map<int, Base*>std::map<int, Derived_1*>是不同的类型。

最直接的解决方案是在所有地方使用std::map<int, Base*>。另一种方法是制作转换功能,但它不那么优雅,你会受到性能损失。

另一种选择,虽然更有限,但可以使用std::variant(如果使用C ++ 17)或boost::variant来存储所有可能的类型。对应的是你可能不得不与访客打交道等等。