【发布时间】:2016-10-23 05:47:15
【问题描述】:
我想知道是否可以使用模板作为地图的键。例如:
std::map< <T> , Node> nodes;
本质上,我想要做的是能够拥有一堆包含任意类型数据的节点,并由该数据键入。我想我可以通过将所述数据转换为二进制并通过它键入来做到这一点,但这很麻烦,我想避免它。
为了澄清,我希望能够使用任何类型的变量作为键。例如,如果我有 2 个节点,一个包含一个 int 作为其数据,另一个包含一个 Foo 作为其数据,我希望能够使用它们的数据作为键将它们放在同一个映射中。也许地图不是我想要的,我不确定……
想法? 谢谢!
【问题讨论】:
-
您需要选择特定类型才能实例化该类。但是,您可以查看 Boost Any:boost.org/doc/libs/1_61_0/doc/html/any.html。
-
不清楚你要做什么
-
运行时还是编译时?如果是编译时,您不是在寻找 template
constexpr ...吗?如果是运行时,输入如下。 -
虽然对于大量可能的类型来说并不漂亮,但Boost.Variant 是一种选择。
-
还要考虑您是否真的需要
std::map或者std::unordered_map是否足够,这将避免必须为不同类型定义小于比较。
标签: c++ templates dictionary