我目前正在尝试将多个<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);
但是,在编译时我得到的错误是派生地图和基类之间没有转换。
有没有更好的(或简单的工作)方法来解决这个问题?提前谢谢。
答案 0 :(得分:3)
不,没有办法直接实现,因为std::map<int, Base*>
和std::map<int, Derived_1*>
是不同的类型。
最直接的解决方案是在所有地方使用std::map<int, Base*>
。另一种方法是制作转换功能,但它不那么优雅,你会受到性能损失。
另一种选择,虽然更有限,但可以使用std::variant
(如果使用C ++ 17)或boost::variant
来存储所有可能的类型。对应的是你可能不得不与访客打交道等等。