如何在允许运行时调用的同时保证算法的编译时评估

mun*_*764 3 c++ c++20

我有一个散列函数,我想用 C++20 consteval来实现它,以确保我想在编译时评估的输入将在运行前完成。那是常量和硬编码内容。但是,稍后我需要将它们与运行时/动态变量进行比较,为了使 equals() 起作用,我必须计算运行时变量的哈希值,并且需要从运行时调用完全相同的算法。

本能是实现它两次(一次用于编译时,一次用于运行时),但是当代码本质上是相同的算法/代码时,复制代码感觉是错误的。有没有更聪明的方法(模板变量或其他东西)来拥有一个可以根据需要为两个目的实例化的算法?

C++14 及更高版本有很多很棒的功能,我想知道是不是我忘了什么。最好我想使用纯 C++ 特性并避免像 std boost 等帮助库......

Aco*_*orn 6

如何在允许运行时调用的同时保证算法的编译时评估

将您的函数编写为一个函数constexpr,然后,如果您想保证在编译时完成特定结果,请将结果写入一个constexpr 变量

constexpr int f(...) { ... }

constexpr int compile_time_result = f(...);
Run Code Online (Sandbox Code Playgroud)

如果在编译时无法计算结果,您将收到错误消息。

如果您不在乎,请取出constexpr变量的 :

int maybe_runtime_result = f(...);
Run Code Online (Sandbox Code Playgroud)