2016-04-23 6 views
0

следующие работы, но я чувствую, что это должно быть возможно, не прибегая к использованию decltype от типа возвращаемой функции:Замена типа обертки параметров пакета

typedef std::size_t SizeT; 

    template<SizeT... Indices> struct IndexList { }; 

    template<SizeT... Is> 
    constexpr decltype(auto) ExtractIndices(std::integer_sequence<SizeT, Is...>) 
    { 
     return IndexList<Is...>{ }; 
    } 

    template<SizeT N> 
    using MakeIndexSequence = std::make_integer_sequence<SizeT, N>; 

    template<SizeT N> 
    using MakeIndexList = decltype(ExtractIndices(MakeIndexSequence<N>{ })); 

Есть ли лучший способ, чтобы изменить " тип оболочки "пакета параметров?

ответ

1

Поскольку вы просто альясинга std::index_sequence, вы могли бы просто сделать это более явно:

template<SizeT... Indices> 
using IndexList = std::index_sequence<Indices...>; 

template<SizeT N> 
using MakeIndexList = std::make_index_sequence<N>; 

Хотя предпочитают использовать только то, что в стандартной библиотеке. Представлять свои собственные имена сбивает с толку.