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

Pau*_*nta 15 c++ rtti typeinfo

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

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

那有什么用呢?

ybu*_*ill 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";
}
Run Code Online (Sandbox Code Playgroud)

  • @ildjarn:你误解了这个问题.该标准不保证每种类型最多只存在一个`type_info`.事实上,遇到*为同一类型创建的多个`typeinfo`*是很常见的.最琐碎的案例是动态链接库的背景,就像Dietmar说的那样. (6认同)

Die*_*ühl 5

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

  • @DietmarKühl:请注意,C ++ 11定义了“ type_index”,它只是定义了所有比较运算符的“ const type_info *”的包装。 (4认同)
  • “ *显而易见的后续问题是:为什么它不拼写为operator &lt;()?*”一个人如何为指针类型定义`operator &lt;`? (2认同)