Bil*_*eal 8 c++ unordered-map rtti typeinfo c++11
我仍在努力为我的One-A型容器问题提供一个很好的解决方案- 经过反思,我认为能够使用类似的东西会很好std::map<std::type_info, boost::any>.不幸的是,std::type_info没有定义一个operator<,我认为它定义一个是不合理的.
但是,为它定义哈希函数似乎是合理的,因为您可以简单地将std::type_info对象的单个地址用作合理的"哈希".因此,您可以将std::type_infoa std::unordered_map作为键.
C++ 11是否提供了这样的哈希函数?使用std::type_info单例的内存地址会是一个错误的哈希策略吗?
type_info不低于可比性的事实并不是将其用作映射键的问题,因为它type_info是不可复制的事实.:-)
在C++ 03中,type_info有一个before()提供type_info对象排序的成员函数.
在C++ 11中,type_info有一个hash_code()成员函数(C++11§18.7.1/ 7):
Run Code Online (Sandbox Code Playgroud)size_t hash_code() const throw();返回:一个未指定的值,除了在程序的单次执行中,它应为任何两个
type_info比较相等的对象返回相同的值.备注:实现应该为两个
type_info不比较相等的对象返回不同的值.
type_infotypeid操作符产生的对象一直存在到程序结束,因此使用a type_info*作为映射键是安全的.但是,据我所知,无法保证如果您应用typeid两个相同类型的对象,您将获得对同一type_info对象的两个引用.
如果你type_info*用作映射键,我会使用一个自定义比较器来取消引用指针并比较type_info对象本身(使用上述before()或hash_code()订购).