我在几个不同的地方读到使用 C++11 的新字符串文字可能可以在编译时计算字符串的哈希值。然而,似乎没有人愿意站出来说这将是可能的或如何完成。
- 这可能吗?
- 操作员会是什么样子?
我对这样的用例特别感兴趣。
void foo( const std::string& value )
{
switch( std::hash(value) )
{
case "one"_hash: one(); break;
case "two"_hash: two(); break;
/*many more cases*/
default: other(); break;
}
}
注意:编译时散列函数不必和我写的完全一样。我尽力猜测最终的解决方案会是什么样子,但 meta_hash<"string"_meta>::value
也可能是一个可行的解决方案。
原文由 deft_code 发布,翻译遵循 CC BY-SA 4.0 许可协议
这有点晚了,但我成功地使用
constexpr
实现了编译时 CRC32 函数。它的问题在于,在撰写本文时,它仅适用于 GCC,而不适用于 MSVC 或 Intel 编译器。这是代码片段:
CrcVal01
等于0x335CC04A希望对你有帮助!