【发布时间】:2012-12-21 08:29:26
【问题描述】:
如果我有三种类型的地图和矢量:
map1<CString, int>
map2<CString, int, std::function1>
map3<some_wrapper_of_CString, int, std::function2>
在 stl 中是否有一个抽象容器或一种方法来编写我自己的抽象容器,其唯一目的是进行多态性:
abstract_map = map1 or map2 or map3
我的课程包含我无法修改的 map1,因为它会使我的大学在工作中使用的其他课程崩溃。我想通过创建一个抽象地图来包装 map1,我可以在不进行其他修改的情况下传递 map2 和 3...
我希望这是有道理的.....
【问题讨论】:
-
您需要完整说明地图的实际类型,以及键和值之间的关系(公共基础、转换运算符等),以便我们有机会了解您正在尝试什么以及为什么您认为多态是解决方案。
-
@MatthieuM。我编辑了问题
-
您还需要在仿函数上键入擦除吗?这就是
std::function已经存在的目的。两种std::function类型的类型有何不同?那里的签名应该是一样的。 -
@pmr 签名是相同的,但类有 map1 作为成员,如果我通过构造函数传递 map2,它会给我一个错误,说它们不匹配
-
@djWann 显而易见的解决方案是将
map1设为map< CString, int, std::function<...> >。
标签: c++ stl map vector abstract-class