谁知道如何实现C++ std::make_index_sequence的反向版本。要得到-make_index_sequence_reverse<int, 5> = <4,3,2,1,0>。谢谢!
std::make_index_sequence
make_index_sequence_reverse<int, 5> = <4,3,2,1,0>
vngu2lb81#
恕我直言,没有理由index_sequence_reverse:std::index_sequence支持索引序列,并且是顺序中立的(或者甚至没有顺序)。如果可以使用std::make_index_sequence,则可以为makeIndexSequenceReverse创建以下内容
index_sequence_reverse
std::index_sequence
makeIndexSequenceReverse
#include <utility> #include <type_traits> template <std::size_t ... Is> constexpr auto indexSequenceReverse (std::index_sequence<Is...> const &) -> decltype( std::index_sequence<sizeof...(Is)-1U-Is...>{} ); template <std::size_t N> using makeIndexSequenceReverse = decltype(indexSequenceReverse(std::make_index_sequence<N>{})); int main () { static_assert( std::is_same<std::index_sequence<4U, 3U, 2U, 1U, 0U>, makeIndexSequenceReverse<5U>>::value, "!" ); }
wlp8pajw2#
这里有一个继承的方法:
template <std::size_t, typename> struct make_reverse_index_sequence_helper; template <std::size_t N, std::size_t...NN> struct make_reverse_index_sequence_helper<N, std::index_sequence<NN...>> : std::index_sequence<(N - NN)...> {}; template <size_t N> struct make_reverse_index_sequence : make_reverse_index_sequence_helper<N - 1, decltype(std::make_index_sequence<N>{})> {};
helper struct用于推导参数和应用减法,它可以像std::make_index_sequence一样使用,因为它是从std::index_sequence派生的,如下图所示:
std::index_sequence<4, 3, 2, 1, 0> x = make_reverse_index_sequence<5>{};
2条答案
按热度按时间vngu2lb81#
恕我直言,没有理由
index_sequence_reverse
:std::index_sequence
支持索引序列,并且是顺序中立的(或者甚至没有顺序)。如果可以使用
std::make_index_sequence
,则可以为makeIndexSequenceReverse
创建以下内容wlp8pajw2#
这里有一个继承的方法:
helper struct用于推导参数和应用减法,它可以像
std::make_index_sequence
一样使用,因为它是从std::index_sequence
派生的,如下图所示: