我有一个散列函数,我想用 C++20 consteval来实现它,以确保我想在编译时评估的输入将在运行前完成。那是常量和硬编码内容。但是,稍后我需要将它们与运行时/动态变量进行比较,为了使 equals() 起作用,我必须计算运行时变量的哈希值,并且需要从运行时调用完全相同的算法。
本能是实现它两次(一次用于编译时,一次用于运行时),但是当代码本质上是相同的算法/代码时,复制代码感觉是错误的。有没有更聪明的方法(模板变量或其他东西)来拥有一个可以根据需要为两个目的实例化的算法?
C++14 及更高版本有很多很棒的功能,我想知道是不是我忘了什么。最好我想使用纯 C++ 特性并避免像 std boost 等帮助库......
如何在允许运行时调用的同时保证算法的编译时评估
将您的函数编写为一个函数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)
归档时间: |
|
查看次数: |
80 次 |
最近记录: |