Jes*_*Jes 2 c++ templates metaprogramming c++14
所以,C++ 14提供结构make_index_sequence<N>用于从生成索引序列0到N-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>
Run Code Online (Sandbox Code Playgroud)
您定义的方式index_range(在编辑问题之前)答案很简单:
template<std::size_t Min, std::size_t Max>
using make_index_range = index_range<Min, Max>;
Run Code Online (Sandbox Code Playgroud)
哪个不是很有用.
所以我会假设你的意思是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>()));
Run Code Online (Sandbox Code Playgroud)
或者,如果您想make_index_range成为类模板,请add按上述定义,然后:
template<std::size_t Min, std::size_t Max>
struct make_index_range {
using type = decltype(add<Min>(make_index_sequence<Max-Min>()));
};
Run Code Online (Sandbox Code Playgroud)
(但有了这个你必须使用,make_index_range<5, 9>::type所以别名模板可能更好,更接近make_index_sequence工作方式.)