Мне нужно указать некоторые данные на карте по типу. В настоящее время у меня есть что-то вроде этого:Зачем использовать std :: type_index вместо std :: type_info *
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
, который, кажется, предназначено для использования в таком случае, как это.
Я заинтересован в улучшении моего знания на С ++. Может кто-нибудь объяснить, следует ли мне изменить код для использования std::type_index
и почему? кроме возможности удалить TypeInfoComparer
?
Почему, по вашему мнению, 'type_info', возвращаемый' typeid', является постоянным и уникальным для данного типа? – Yakk
@Yakk: «Результатом выражения typeid является lvalue статического типа const std :: type_info ... Время жизни объекта, на которое ссылается значение lvalue, продолжается до конца программы». ([Expr.typeid]). Он не предполагает, что он уникален; он использует стандартную функцию 'before' member в своем компараторе. Я не знаю, почему все пропускают этот факт. – rici