我有一个constexpr
函数,该函数根据字符串文字计算CRC32哈希值。
template <size_t len>
constexpr uint32_t ctcrc32(const char (&str)[len]) {
return detail::crc32<len - 2>(str) ^ 0xFFFFFFFF;
}
(它指的是其他
constexpr
函数)我想做的是调用其他一些接受
uint32_t
值的函数,并使用它来访问unordered_map
中的数据。这样的调用看起来像这样:uniformByNameCRC32(ctcrc32("uPointLight.position"));
我希望
"uPointLight.position"
的哈希在构建时计算一次,然后将结果常量传递给uniformByNameCRC32()
,但事实并非如此,由于我有很多ctcrc32()
调用,因此uniformByNameCRC32()
在运行时被调用,这基本上会杀死CPU。但是,这很好用:
std::array<uint64_t, ctcrc32("string_literal")> array;
这样的代码编译并指示
ctcrc32()
的返回值确实是constexpr
。我在这里想念什么?
最佳答案
使用中间的constrexpr变量:
constexpr auto value = ctcrc32("uPointLight.position")
uniformByNameCRC32(value);