在C++ 11中,我正在使用它
typeid(T).name()
Run Code Online (Sandbox Code Playgroud)
对于我自己的哈希计算.我不需要在程序运行或编译之间使结果相同.我只需要它对于类型是唯一的.我知道,它可以为不同类型的返回相同的名称,但它通常是常量,指针等.在我的情况下,T
仅仅是class XY
,struct XX
或派生类型.
在这种情况下,我可以假设,这T
将是独一无二的吗?
Sto*_*ica 25
您应该std::type_index
用于映射目的.
type_index类是围绕std :: type_info对象的包装类,可以在关联和无序关联容器中用作索引.与type_info对象的关系通过指针维护,因此type_index是CopyConstructible和CopyAssignable.
Tar*_*ama 18
std::type_info::name
是实现定义的,因此您不应该依赖它对于不同类型是唯一的.
由于您正在为哈希计算执行此操作,因此您应该使用std::type_info::hash_code
.虽然这并不能保证这些值是唯一的,但标准规定实现应尝试为不同类型返回不同的值.只要您的哈希映射实现具有合理的冲突处理,这对您来说就足够了.
返回包含类型名称的实现定义的以null结尾的字符串.不给出任何保证,特别是返回的字符串对于几种类型可以是相同的,并且在相同程序的调用之间改变.
所以,不,你不能.你实际上不能做任何事情.
虽然,hash_code()
给你:
size_t hash_code() const noexcept;
7返回:一个未指定的值,除了在程序的单次执行中,它应为任何两个比较相等的type_info对象返回相同的值.
8备注:实现应为两个不比较相等的type_info对象返回不同的值.
这意味着hash_code()
可以用来区分两种不同类型的只有当operator==
为type_info
支持此功能.
归档时间: |
|
查看次数: |
3703 次 |
最近记录: |