【问题标题】:Replacing the wrapper type of a parameter pack替换参数包的包装器类型
【发布时间】:2016-04-23 18:57:11
【问题描述】:

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

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

【问题讨论】:

    标签: c++ variadic-templates indices


    【解决方案1】:

    由于您只是给 std::index_sequence 起别名,因此您可以更明确地这样做:

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

    虽然更喜欢只使用标准库中的内容。介绍自己的名字会让人困惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2012-10-24
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多