Для чего полезна `type_info :: before`? - PullRequest
15 голосов
/ 30 декабря 2011

Согласно cplusplus.com, функция std::type_info::before() ...

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

Так для чего он нужен?

Ответы [ 4 ]

24 голосов
/ 30 декабря 2011

Предположим, вы хотите поместить свои 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";
}
5 голосов
/ 30 декабря 2011

Это полезно для определения порядка объектов typeinfo, например, для помещения их в std :: map.Очевидный последующий вопрос: почему не пишется оператор <()?Я не знаю ответа на этот вопрос. </p>

1 голос
/ 30 декабря 2011

Думайте об этом как о менее чем (<) операторе для type_info объектов.Если вы когда-нибудь хотели хранить в упорядоченной коллекции - такой набор карт - вы можете использовать его, чтобы сделать соответствующий компаратор.Это надежный и предпочтительный способ, в отличие от, скажем, использования имени типа, которое может быть не уникальным.

1 голос
/ 30 декабря 2011

Это дает порядок.

Это требуется, если вы хотите хранить значения в некоторых контейнерах, например, std :: map.

...