2016-04-23 10 views
0

Folgende Arbeiten, aber ich fühle mich wie es ohne Rückgriff auf die Verwendung decltype auf die Funktion Rückgabetyp möglich sein muss:Ersetzen der Wrapper Typ eines Parameters Pack

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>{ })); 

Gibt es einen besseren Weg, das zu ändern " Wrappertyp "eines Parameterpakets?

Antwort

1

Da sind Sie nur std::index_sequence Aliasing, könnten Sie mehr explizit genau das tun:

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

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

Obwohl lieber nur verwenden, was in der Standardbibliothek ist. Die Einführung Ihrer eigenen Namen ist verwirrend.