2016-11-15 6 views
2

したがって、C++ 14は0からN-1までのインデックスシーケンスを生成するために構造体make_index_sequence<N>を提供します。私は与えられた範囲でインデックスシーケンスを生成する方法を実装する方法を知っています。例えば:(質問が編集された前)与えられた範囲でインデックスシーケンスを生成するためのC++テンプレートを実装する

template <size_t Min, size_t Max> 
struct make_index_range; 

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

答えて

7

あなたがindex_rangeを定義された方法は、答えは単純です:非常に有用ではありません

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

。だから、

私はあなたがこのように行うことができますindex_sequence<5, 6, 7, 8>を与えるmake_index_range<5, 9>を意味と仮定するつもりです:

#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をしたい場合は、上記のようにして、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_sequence作品に近いmake_index_range<5, 9>::typeを使用する必要があります。)

関連する問題