我想做这样的事情:
template <typename T>
constexpr ::std::size_t type_name_hash()
{
return ::std::hash<::std::string>()(typeid(T).name());
}
Run Code Online (Sandbox Code Playgroud)
现在,我既不知道hash也不string是constexpr,但是这可能是周围的工作,承担他们constexpr.我想问的是,如果RTTI打开,constexpr计算哈希值的函数是否typeid(T).name()还会产生编译时常量?什么时候RTTI 关闭?
typeid(type-id)和typeid(expr)都可以在常量表达式中使用,除非(如前所述)expr的结果是多态类类型的glvalue.
但是,由于没有type_info标准成员constexpr(包括hash_code()方法),除了获取其地址外,您无法对该对象执行任何操作.标准中甚至没有保证对象被初始化.即使获取地址也几乎没用,因为当使用相同类型时,无法保证typeid()具有相同的结果.例如,以下断言可能会失败:
static_assert(&typeid(int) == &typeid(int), "Multiple type_infos for int");
Run Code Online (Sandbox Code Playgroud)
这是一个人为的例子,但是在程序中使用的多个共享库中甚至可能在不同的翻译单元中typeid(T)产生不同的结果并不是闻所未闻T.
| 归档时间: |
|
| 查看次数: |
1760 次 |
| 最近记录: |