为什么使用std::type_index而不是std::type _info*

Why use std::type_index instead of std::type_info*

本文关键字:type std info 为什么 index      更新时间:2023-10-16

我需要按类型在映射中键入一些数据。目前我有这样的东西:

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*,您将不必在映射中提供显式比较器。唯一的成本是你需要#include <typeindex>

另一个好处是,它将允许您切换到(或同时使用)哈希映射(也称为unrdered_maps)。

总的来说,由于它简化了您的代码,我会说"去做吧"。

我不认为使用指向typeid(x)返回的结果的指针可以保证总是产生相同的结果。特别是,在使用共享库时,保证返回相同的对象似乎有问题。std::type_info用于排序的预期用途是使用before()成员。类std::type_index将其封装到一个simoler接口中。

相关文章: