基本上,我需要一个真正的 C++ 编译时字符串散列。我不关心技术细节,可以是模板、宏,任何东西。到目前为止我见过的所有其他哈希技术只能在编译时生成哈希表(如 256 CRC32 哈希),而不是真正的哈希。
换句话说,我需要这个
printf("%d", SOMEHASH("string"));
被编译为(在伪汇编器中)
push HASHVALUE
push "%d"
call printf
即使在调试版本中,也没有对字符串进行运行时操作。我正在使用 GCC 4.2 和 Visual Studio 2008,我需要解决方案适合这些编译器(所以没有 C++0x)。
最佳答案
问题在于,在 C++03 中下标字符串文字(即访问单个字符)的结果不是适合用作模板参数的编译时常量。
因此这是不可能的。我建议您编写一个脚本来计算哈希并将它们直接插入到源代码中,即
printf("%d", SOMEHASH("string"));
转换为
printf("%d", 257359823/*SOMEHASH("string")*/));
关于c++ - C++ 中真正的编译时字符串散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457830/