ev-mp-units-integer-sequence-tuple-001¶
| 字段 | 值 |
|---|---|
| 项目 | mpusz/mp-units |
| 固定 commit | 27d2def9082c |
| 路径 | src/core/include/mp-units/ext/algorithm.h |
| 行段 | L167-L177 |
| 特性 | std::integer_sequence |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-11-03 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
用 index_sequence 展开 tuple,把每个元素交给回调
为什么典型¶
tuple 不能直接遍历,必须把元素下标变成参数包;index_sequence 提供 0..N-1,配合 std::get 展开每个元素。index_sequence_for 则直接从类型包推导长度。
摘录¶
template<typename... Ts, typename F, std::size_t... Is>
constexpr void for_each_impl(const std::tuple<Ts...>& t, F&& func, std::index_sequence<Is...>)
{
(..., func(std::get<Is>(t)));
}
template<typename... Ts, typename F>
constexpr void for_each(const std::tuple<Ts...>& t, F&& func)
{
for_each_impl(t, std::forward<F>(func), std::index_sequence_for<Ts...>{});
}
备注¶
生产头文件;index_sequence 在这里同时服务于参数包展开和折叠表达式,是 tuple 遍历的标准写法。