我需要按类型在 map 中键入一些数据。目前我有这样的事情:

struct TypeInfoComparer
{
  bool operator()(std::type_info const* a, std::type_info const* b) const
  {
    return a->before(*b);
  };
};

std::map<std::type_info const*, Foo, TypeInfoComparer> d_fooByTypeId;

然后我可以通过使用它来查找(例如,在具有<typename T>的模板方法中:
auto pair = d_fooByTypeId.find(&typeid(T));

但是今天我正在阅读有关 std::type_index 的信息,它似乎打算在这种情况下使用。

我对提高我的C++知识感兴趣。有人可以解释我是否应该修改我的代码以使用std::type_index,为什么?除了能够删除TypeInfoComparer之外,还有其他原因吗?

最佳答案

type_index是“type_info的简单包装,可以在关联容器(23.4)和无序关联容器(23.5)中用作索引类型”。如果您使用type_index而不是type_info*,那么您将不必在 map 中提供显式比较器。唯一的花费就是您需要#include <typeindex>

另一个好处是,它将允许您切换到(或也使用)哈希图(也称为unordered_maps)。

总体而言,由于它简化了您的代码,因此我会说“继续”。

09-10 02:11
查看更多