Re: use of type_index any better than &typeid()?
Am 13.01.2013 21:25, schrieb Frank Birbacher:
In C++03 I've used a std::map<std::type_info const*, whatever> to
create a map of types. The standard guarantees the uniqueness of
type_info instances. I see there is a std::type_index in C++11. What
benefit does it offer?
std::type_index is just a convenience type that provides a regular
interface for std::type_info objects. So it ensures that this view of
std::type_info is CopyConstructible, LessThanComparable (to make it
directly usable in associative containers) and specializes the std::hash
template (to make it directly usable in unordered containers).
For unordered containers a specialization of
std::hash for type_info* would suffice, I guess.
It would have been possible, yes. But (a) this would not be sufficient,
because you also need a specialization for std::equal_to. And (b) this
approach would be a quite obfuscated way of doing that. It also means
that you always have to work with types that are potentially nullable
(and you may not want this property). Providing std::type_index ensured
that you always get a non-null type information object that is
copy-constructible and copy-assignable.
I think this could be quite surprising to users, and the standardized
wrapper approach signals better this intention.
You can still work with std::type_info const* directly as you did in
C++03 where you also needed to specify a comparator for associative
containers in C++11 within unordered containers: just define the proper
equality predicate and hash function.
HTH & Greeting from Bremen,
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]