实现用于生成具有给定范围的索引序列的 C++ 模板

Implement C++ template for generating an index sequence with a given range

所以,C++14提供了struct make_index_sequence<N>来生成从0N-1的索引序列。我想知道如何实现一个在给定范围内生成索引序列。例如:

template <size_t Min, size_t Max>
struct make_index_range;  

// make_index_range<5, 9> will give index_sequence<5, 6, 7, 8>

您定义 index_range 的方式(在编辑问题之前)答案很简单:

template<std::size_t Min, std::size_t Max>
  using make_index_range = index_range<Min, Max>;

这不是很有用。

所以我假设你的意思是 make_index_range<5, 9> 会给出 index_sequence<5, 6, 7, 8>,可以这样做:

#include <utility>

template<std::size_t N, std::size_t... Seq>
  constexpr std::index_sequence<N + Seq ...>
  add(std::index_sequence<Seq...>)
  { return {}; }

template<std::size_t Min, std::size_t Max>
  using make_index_range = decltype(add<Min>(make_index_sequence<Max-Min>()));

或者,如果您希望 make_index_range 成为 class 模板,请按上述方式定义 add,然后:

template<std::size_t Min, std::size_t Max>
  struct make_index_range {
    using type = decltype(add<Min>(make_index_sequence<Max-Min>()));
  };

(但是你必须使用 make_index_range<5, 9>::type 所以别名模板可能更好,更接近 make_index_sequence 的工作方式。)