c++ - C++ 中真正的编译时字符串散列

标签 c++ hash compile-time

基本上,我需要一个真正的 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/

相关文章:

c++ - 在文件中从右向左写入数据?

ruby-on-rails - 如何在不替换第一个哈希的情况下合并哈希的哈希

c++ - Unordered_Map of Maps 还是 Priority_Queues?

c++ - 是否有一个简单的 C 或 C++ 函数来计算字符串的 sha1 哈希?

c++ - 条件运算符 ( ? : ) in C++ be compile time?

c++ - 将 3D 模型导入 OpenGL/C++ 项目的推荐文件格式和图形库?

C++ MySQL++ 删除查询语句的脑残题

c# - C# 7 中 "throw"表达式的编译时类型是什么?

c# - 调用者的编译时验证,或者是否可以扩展 C# 编译器?

C++ 自定义迭代器和 (*this)