Reputation: 31597
According to cplusplus.com, the std::type_info::before()
function...
Returns true if the type precedes the type of rhs in the collation order.
The collation order is just an internal order kept by a particular implementation and is not necessarily related to inheritance relations or declaring order.
So what is it useful for?
Upvotes: 20
Views: 7338
Reputation: 22780
Think of it as less-than (<
) operator for type_info
objects. If you ever wanted to store in ordered collection - such a set of map - you can use it to make an appropriate comparator. It's a reliable and preferred way, as opposed to, say, using type's name which might not be unique.
Upvotes: 1
Reputation: 154025
This is useful to define an order on typeinfo objects, e.g. to put them into a std::map. The obvious follow-up question is: why isn't it spelled operator<()? I don't know the answer to this question.
Upvotes: 9
Reputation: 72539
Consider you want to put your type_info
objects as keys into a map<type_info*, value>
. The type_info
doesn't have an operator <
defined, so you must provide your own comparator. The only thing that is guaranteed to work from the type_info
interface is the before()
function, since neither the addresses of type_info
nor the name()
must be unique:
struct compare {
bool operator ()(const type_info* a, const type_info* b) const {
return a->before(*b);
}
};
std::map<const type_info*, std::string, compare> m;
void f() {
m[&typeid(int)] = "Hello world";
}
Upvotes: 29
Reputation: 92361
It gives an ordering.
That is required if you want to store values in some containers, like std::map.
Upvotes: 1