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

来源:互联网 发布:手机外形设计软件 编辑:程序博客网 时间:2024/09/21 09:05

转自:  http://stackoverflow.com/questions/20022546/why-use-stdtype-index-instead-of-stdtype-info


------------------------------------------------------Ask--------------------------------------------------------------------------

I need to key some data in a map by a type. Currently I have something like this:

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;

Which I can then look up from using (for example, in a template method having <typename T>:

auto pair = d_fooByTypeId.find(&typeid(T));

However today I was reading about std::type_index which seems to be intended for use in such a case as this.

I'm interested in improving my C++ knowledge. Can someone please explain whether I should modify my code to use std::type_index, and why? Is there a reason beyond being able to remove the TypeInfoComparer?

----------------------------------------------------Answer---------------------------------------------------------------------------

type_index is "a simple wrapper for type_info which can be used as an index type in associative containers (23.4) and in unordered associative containers (23.5)". If you use type_index instead of type_info*, you will free yourself from having to provide an explicit comparator in your maps. The only cost is that you need to #include <typeindex>.

Another benefit is that it will allow you to switch to (or also use) hashmaps (aka unordered_maps).

On the whole, since it simplifies your code, I'd say "go for it".






0 0