gpt4 book ai didi

c++ - 哈希模板元函数和函数

转载 作者:太空狗 更新时间:2023-10-29 20:05:40 24 4
gpt4 key购买 nike

在编译时使用 C++ 模板元函数可以进行任何计算。因此,我在考虑,如果可以做到以下几点:

void my_function(char const* string_ptr)
{
switch (hash_function(string_ptr))
{
case hash_metafunction<"yoohooo">::value:
...
break;

case hash_metafunction<"woooooo">::value:
...
break;

...
}
}

您能否提供有关在哪里可以找到散列函数和模板元函数的代码(库)的线索?如果不存在这样的库,您能否提示我如何自己滚动模板元函数?我特别担心模板元函数的 char const* 参数。也许一些预处理器魔术是可能的?

最佳答案

constexpr 函数怎么样?当然,实现该散列可能很痛苦。你会得到这样的东西:

// maybe another return type
constexpr uint64_t hash_metafunction(const char* input) {
// replace some_value with the hash implementation
return some_value;
}

void my_function(char const* string_ptr)
{
switch (hash_function(string_ptr))
{
case hash_metafunction("yoohooo"):
...
break;

case hash_metafunction("woooooo"):
...
break;

...
}
}

hash_metafunction 函数将在编译时执行。

编辑:这是一个简单的实现,基本上将输入字符串转换为 uint64_t:

constexpr uint64_t do_the_hash(const char* input, uint64_t value_so_far) {
return *input ? do_the_hash(input + 1, (value_so_far << 8) | *input) : value_so_far;
}

constexpr uint64_t hash_metafunction(const char* input) {
return do_the_hash(input, 0);
}

现场演示 here .

编辑:我实现了一个编译时MD5,你可以找到源代码here .要使用它,请执行以下操作:

#include <iostream>
#include "md5.h"

int main() {
constexpr auto value = ConstexprHashes::md5("constexpr rulz");

std::cout << std::hex;
for(auto v : value) {
if(((size_t)v & 0xff) < 0x10)
std::cout << '0';
std::cout << ((size_t)v & 0xff);
}
std::cout << std::endl;
}

这会打印出哈希值:“b8b4e2be16d2b11a5902b80f9c0fe6d6”。

关于c++ - 哈希模板元函数和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12198808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com