' type_info::before '有什么用?
What is `type_info::before` useful for?
根据cplusplus.com, std::type_info::before()
函数…
如果该类型在排序顺序中位于rhs的类型之前,则返回true。
排序顺序只是由特定实现保持的内部顺序,不一定与继承关系或声明顺序相关。
那么它有什么用呢?
考虑您想要将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";
}
这对于定义typeinfo对象的顺序很有用,例如将它们放入std::map中。显而易见的后续问题是:为什么不拼写为operator<()?我不知道这个问题的答案。
给出了一个排序。
如果您希望在某些容器中存储值,例如std::map
将其视为type_info
对象的小于(<
)运算符。如果您曾经想要在有序集合中存储——比如一组映射——您可以使用它来创建一个合适的比较器。这是一种可靠且首选的方法,而不是使用可能不是唯一的类型名。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 什么时候在C++中返回常量引用是个好主意
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- C++避免重复声明的语法是什么
- c++库的公共头文件中应该包含什么
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- ifstream什么都没读
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 什么是log(info)和日志(错误)进行
- 我的输出中的D3D11 INFO行是什么意思