c++ - 替换参数包的包装器类型

原文 标签 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>{ }));


有没有更好的方法来更改参数包的“包装器类型”?

最佳答案

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

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

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


虽然更喜欢只使用标准库中的内容。介绍您自己的名字会造成混淆。

相关文章:

c++ - 可变模板化类中的模板化方法

c++ - 在折叠表达式中扩展参数包作为lambda捕获的一部分-gcc vs clang [重复]

java - 如何获取多维数组中对象的索引?

python - 汇总矩阵元素在Python中按索引分组

c++ - Directx:Obj文件解析到索引缓冲区

c++ - 参考文献未给出预期结果

c++ - C ++应用程序中奖彩票[关闭]

c++ - 命名空间中的静态变量与非静态变量

c++ - 如何检测可变参数模板中的第一个和最后一个参数?

c++ - 合并排序中反转的反转计数值