Предположим, вы хотите поместить свои type_info
объекты в качестве ключей в map<type_info*, value>
.type_info
не имеет определенного operator <
, поэтому вы должны предоставить свой собственный компаратор.Единственное, что гарантированно работает из интерфейса type_info
, - это функция before()
, поскольку ни адреса type_info
, ни name()
не должны быть уникальными:
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";
}