' type_info::before '有什么用?

What is `type_info::before` useful for?

本文关键字:什么 info type before      更新时间:2023-10-16

根据cplusplus.com, std::type_info::before()函数…

如果该类型在排序顺序中位于rhs的类型之前,则返回true。
排序顺序只是由特定实现保持的内部顺序,不一定与继承关系或声明顺序相关。

那么它有什么用呢?

考虑您想要将type_info对象作为map<type_info*, value>的键。type_info没有定义operator <,因此必须提供自己的比较器。唯一可以保证从type_info接口工作的是before()函数,因为type_infoname()的地址都不能是唯一的:

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";
}

这对于定义typeinfo对象的顺序很有用,例如将它们放入std::map中。显而易见的后续问题是:为什么不拼写为operator<()?我不知道这个问题的答案。

给出了一个排序。

如果您希望在某些容器中存储值,例如std::map

将其视为type_info对象的小于(<)运算符。如果您曾经想要在有序集合中存储——比如一组映射——您可以使用它来创建一个合适的比较器。这是一种可靠且首选的方法,而不是使用可能不是唯一的类型名。