ev-glaze-consteval-renamed-size-003¶
| 字段 | 值 |
|---|---|
| 项目 | stephenberry/glaze |
| 固定 commit | d78832c82289 |
| 路径 | include/glaze/reflection/get_name.hpp |
| 行段 | L321-L333 |
| 特性 | constexpr 中的动态分配 |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-27 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
用 consteval 求出的长度填充固定大小数组,避免常量求值结束后留下悬空分配
为什么典型¶
瞬态 std::string 只用于求长度,结果存入 std::array,避免常量求值结束后留下悬空分配。
摘录¶
template <class T, size_t I, size_t N = renamed_key_size<T, I>()>
struct renamed_key_storage
{
static constexpr auto value = [] {
std::array<char, N + 1> arr{};
auto str = meta<std::remove_cvref_t<T>>::rename_key(member_nameof<I, T>);
for (size_t i = 0; i < N; ++i) {
arr[i] = str[i];
}
arr[N] = '\0';
return arr;
}();
};
备注¶
生产路径;renamed_key_storage 把编译期字符串降级为固定大小数组,供运行期直接使用。