【发布时间】:2016-10-31 00:39:16
【问题描述】:
我有一个像这样存储两个地图的类:
class Database {
std::map<A,B> map1;
std::map<C,A> map2;
};
我刚刚加入了部分课程。 Database 有更多我没有包含的功能和数据元素。
我想将 map 的实现从 std::map 更改为具有相同公共接口的其他东西。这似乎是一个模板的好地方。
通常,我会在顶部写template<class Map> 并完成。但是,有一个问题。
Map 在这个类中不是专门的。例如,如果我只需要一张地图。写模板就好了。我会将“数据库”定义为Database<std::map<A, B>>。但是,我需要两个单独的地图实例。
我是否需要写template<class Map1, class Map2> 并将“数据库”定义为Database<std::map<A, B>>? 或者有没有更好的方法来进行模板化定义。还是在这种情况下模板是错误的技术?
理想情况下,我希望能够写Database<std::map>。 这可能吗?
我之前检查过:
Error when pass std::map as template template argument
Error passing map to template function in C++
Passing unspecialized template as a template parameter
但是,这两个并不能真正解决我有两个不同参数化的问题。
编辑: 总的来说,我正在尝试为数据库指定地图的实现。我希望能够编写Database或Database,并以指定的方式实现Database的map元素。
【问题讨论】:
-
为什么我被否决了?
-
你在这里试图做什么?您谈论了很多可能的解决方案,但没有谈论您的问题。
-
我正在尝试为数据库指定地图的实现。我希望能够编写 Database<:map> 或 Database
并以指定的方式实现 Database 的地图元素。 -
我不确定您是否以正确的方式解决了这个问题。模板很麻烦。为什么不拥有具有明确定义接口的某种基类,然后将其存储为指针,以便您可以传入任意子类。
-
我考虑过。但是,stackoverflow.com/questions/20829860/… 似乎表明模板是一种更惯用的解决方案。
标签: c++ templates stl polymorphism