替换参数包的包装类型

时间:2016-04-23 18:57:12

标签: c++ variadic-templates indices

以下工作,但我觉得必须可以在不使用函数返回类型的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>{ }));

是否有更好的方法来更改&#34;包装类型&#34;一个参数包?

1 个答案:

答案 0 :(得分:1)

由于你只是别名std::index_sequence,你可以更明确地做到这一点:

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

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

虽然喜欢只使用标准库中的内容。引入自己的名字令人困惑。