跳转至

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 遍历的标准写法。

查看固定 commit 源码 · 返回证据索引