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

以下工作有效,但我认为必须能够不对函数返回类型使用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>;


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

本文翻译自 https://stackoverflow.com/questions/36815088/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 c++ variadic-templates indices


相关文章:

c++ - remove_if字符串中的最后一个字符

python - 沿numpy数组的轴的k个最小值的指标

python - 如何在Python中自动增加用于定义常量索引列表的值?

c++ - CUDA内核作为类的成员函数

c++ - Qt在其他范围内访问TextEdit的文本

c++ - 哪个文件配置Windows Embedded Compact 7.0上的缓存?

c++ - 为什么选择“通用引用”重载而不是char数组或char指针?

c++ - 将函数参数的参数解包到C ++模板类

c++ - 参数包,捕获子句和初始化程序

c - glGetActiveUniformsiv:当统一块对象包含结构对象数组时,找到uniformIndices []? [关闭]