我有一个类存储两个地图,如下所示:
class Database {
std::map<A,B> map1;
std::map<C,A> map2;
};
我刚刚参加了课程的一部分。 Database
包含更多我未包含的功能和数据元素。
我想将地图的实现从std::map
更改为具有相同公共接口的其他内容。这似乎是模板化的好地方。
通常,我会在顶部写template<class Map>
并完成。但是,有一个问题。
地图在此课程中并不专业。例如,如果我只需要一张地图。写模板会很好。我会定义&#39;数据库&#39;为Database<std::map<A, B>>
。但是,我需要两个单独的地图实例。
我是否需要撰写template<class Map1, class Map2>
并定义数据库&#39;如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
然而,这两个并没有真正解决我有两个不同参数化的问题。
编辑: 总的来说,我正在尝试为数据库指定map的实现。我希望能够编写数据库或数据库,并以指定的方式实现数据库的地图元素。
答案 0 :(得分:1)
您可能正在寻找模板模板参数。像这样:
template <template <class...> class Map>
class Database {
Map<A, B> map1;
Map<C, A> map2;
};
Database<std::map> dbOnStdMap;