我想做这样的事情:
template <typename T>
constexpr ::std::size_t type_name_hash()
{
return ::std::hash<::std::string>()(typeid(T).name());
}
现在,我都不知道hash
nor string
are constexpr
,但这可以解决,假设它们是constexpr
。我想问的是,如果RTTI
已打开,应该constexpr
函数计算哈希值typeid(T).name()
仍然产生编译时常量?什么时候怎么样RTTI
已关闭?
typeid(type-id) 和 typeid(expr) 都可以用在常量表达式中,除了 if (如前所述)expr的结果是多态类类型的左值。
然而,由于没有一个type_info
的标准成员是constexpr
(包括hash_code()
方法),除了获取其地址之外,您不能对该对象执行任何操作。标准中甚至没有保证对象已初始化。即使获取地址也几乎没有用,因为不能保证 typeid() 在与相同类型一起使用时具有相同的结果。例如。以下断言可能会失败:
static_assert(&typeid(int) == &typeid(int), "Multiple type_infos for int");
这是一个人为的例子,但这并非闻所未闻typeid(T)
相同的结果会产生不同的结果T
在程序中使用的多个共享库中,甚至可能在不同的翻译单元中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)