Подтвердить что ты не робот

Что такое `type_info:: before`?

В соответствии с cplusplus.com функция std::type_info::before()...

Возвращает true, если тип предшествует типу rhs в порядке сортировки.
Порядок сортировки - это всего лишь внутренний порядок, поддерживаемый конкретной реализацией, и не обязательно связан с отношениями наследования или объявлением порядка.

Итак, для чего это полезно?

4b9b3361

Ответ 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. Если вы когда-либо хотели хранить в упорядоченной коллекции - такой набор карт, вы можете использовать его для создания соответствующего компаратора. Это надежный и предпочтительный способ, в отличие от, скажем, использования имени типа, которое может быть не уникальным.