什么是`type_info :: before`有用?

时间:2011-12-30 18:16:34

标签: c++ rtti typeinfo

根据cplusplus.com,std::type_info::before()功能......

  

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

那么它有用吗?

4 个答案:

答案 0 :(得分:24)

考虑您要将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";
}

答案 1 :(得分:5)

这对于在typeinfo对象上定义顺序很有用,例如将它们放入std :: map。明显的后续问题是:为什么不拼写运算符&lt;()?我不知道这个问题的答案。

答案 2 :(得分:1)

它给出了一个订购。

如果要在某些容器中存储值,则需要这样做,例如std :: map。

答案 3 :(得分:1)

将其视为<对象的小于(type_info)运算符。如果你想存储在有序集合中 - 这样一组地图 - 你可以用它来制作一个合适的比较器。这是一种可靠且首选的方式,而不是使用可能不唯一的类型名称。