Что такое `type_info:: before`?
В соответствии с cplusplus.com функция std::type_info::before()
...
Возвращает true, если тип предшествует типу rhs в порядке сортировки.
Порядок сортировки - это всего лишь внутренний порядок, поддерживаемый конкретной реализацией, и не обязательно связан с отношениями наследования или объявлением порядка.
Итак, для чего это полезно?
Ответы
Ответ 1
Предположим, вы хотите поместить ваши объекты 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";
}
Ответ 2
Это полезно для определения порядка на объектах типаinfo, например. чтобы поместить их в std:: map. Очевидный следующий вопрос: почему он не написал оператор <()? Я не знаю ответа на этот вопрос.
Ответ 3
Он дает заказ.
Это требуется, если вы хотите хранить значения в некоторых контейнерах, например std:: map.
Ответ 4
Подумайте об этом как о менее чем (<
) для объектов type_info
. Если вы когда-либо хотели хранить в упорядоченной коллекции - такой набор карт, вы можете использовать его для создания соответствующего компаратора. Это надежный и предпочтительный способ, в отличие от, скажем, использования имени типа, которое может быть не уникальным.