【问题标题】:Passing Map Implementation through Templates通过模板传递地图实现
【发布时间】:2016-10-31 00:39:16
【问题描述】:

我有一个像这样存储两个地图的类:

class Database {
    std::map<A,B> map1;
    std::map<C,A> map2;
};

我刚刚加入了部分课程。 Database 有更多我没有包含的功能和数据元素。

我想将 map 的实现从 std::map 更改为具有相同公共接口的其他东西。这似乎是一个模板的好地方。

通常,我会在顶部写template&lt;class Map&gt; 并完成。但是,有一个问题。

Map 在这个类中不是专门的。例如,如果我只需要一张地图。写模板就好了。我会将“数据库”定义为Database&lt;std::map&lt;A, B&gt;&gt;。但是,我需要两个单独的地图实例。

我是否需要写template&lt;class Map1, class Map2&gt; 并将“数据库”定义为Database&lt;std::map&lt;A, B&gt;&gt;或者有没有更好的方法来进行模板化定义。还是在这种情况下模板是错误的技术?

理想情况下,我希望能够写Database&lt;std::map&gt;这可能吗?

我之前检查过:

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


【解决方案1】:

您可能正在寻找模板模板参数。像这样的:

template <template <class...> class Map>
class Database {
    Map<A, B> map1;
    Map<C, A> map2;
};

Database<std::map> dbOnStdMap;

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2012-01-29
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多