根据cplusplus.com,std::type_info::before()
功能......
如果类型在排序顺序中位于 rhs 类型之前,则返回true 整理顺序只是特定实现保留的内部顺序,不一定与继承关系或声明顺序相关。
那么它有用吗?
答案 0 :(得分:24)
考虑您要将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";
}
答案 1 :(得分:5)
这对于在typeinfo对象上定义顺序很有用,例如将它们放入std :: map。明显的后续问题是:为什么不拼写运算符&lt;()?我不知道这个问题的答案。
答案 2 :(得分:1)
它给出了一个订购。
如果要在某些容器中存储值,则需要这样做,例如std :: map。
答案 3 :(得分:1)
将其视为<
对象的小于(type_info
)运算符。如果你想存储在有序集合中 - 这样一组地图 - 你可以用它来制作一个合适的比较器。这是一种可靠且首选的方式,而不是使用可能不唯一的类型名称。