相关疑难解决方法(0)

编译时间字符串散列

我在几个不同的地方读过,使用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;
   }
}
Run Code Online (Sandbox Code Playgroud)

注意:编译时哈希函数不必像我编写的那样完全.我尽力猜测最终解决方案的样子,但meta_hash<"string"_meta>::value也可能是一个可行的解决方案.

c++ hash metaprogramming c++11

95
推荐指数
10
解决办法
4万
查看次数

编译时字符串哈希

我需要使用一个字符串作为ID来获取一些对象.在运行时实现这一点,并且运行良好.但由于显而易见的原因,这使得静态类型检查变得不可能.

我用Google搜索了在编译时计算字符串的哈希和的算法:使用Boost.MPL进行C++编译时字符串哈希.

它似乎是我的问题的完美解决方案,除了算法所必需的sring应该被分成4个字符或逐个字符,显而易见的原因.

即,而不是通常的ID的当前记录,我将不得不这样写:

hash_cstring<boost::mpl::string<'obje', 'ct.m', 'etho', 'd'>>::value
Run Code Online (Sandbox Code Playgroud)

这绝对无法使用.

问题是,如何正确传递诸如"object.method"此算法的字符串?

谢谢你们.

c++ hash boost metaprogramming

12
推荐指数
2
解决办法
4142
查看次数

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

基本上我需要在C++中使用真正的编译时字符串散列.我不关心技术细节,可以是模板,宏,任何东西.到目前为止我见过的所有其他散列技术只能在编译时生成散列表(如256个CRC32散列),而不是真正的散列.

换句话说,我需要这个

printf("%d", SOMEHASH("string"));
Run Code Online (Sandbox Code Playgroud)

编译为(在伪汇编程序中)

push HASHVALUE
push "%d"
call printf
Run Code Online (Sandbox Code Playgroud)

甚至在Debug构建中,对字符串没有运行时操作.我正在使用GCC 4.2和Visual Studio 2008,我需要这些编译器的解决方案(所以没有C++ 0x).

c++ hash compile-time

9
推荐指数
2
解决办法
4647
查看次数

标签 统计

c++ ×3

hash ×3

metaprogramming ×2

boost ×1

c++11 ×1

compile-time ×1