替换参数包的包装器类型
Replacing the wrapper type of a parameter pack
下面的工作,但我觉得它必须是可能的,而无需在函数 return 类型上使用 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>{ }));
有没有更好的方法来改变参数包的"wrapper type"?
由于您只是在使用别名 std::index_sequence
,您可以更明确地这样做:
template<SizeT... Indices>
using IndexList = std::index_sequence<Indices...>;
template<SizeT N>
using MakeIndexList = std::make_index_sequence<N>;
尽管更喜欢只使用标准库中的内容。介绍你自己的名字很混乱。
下面的工作,但我觉得它必须是可能的,而无需在函数 return 类型上使用 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>{ }));
有没有更好的方法来改变参数包的"wrapper type"?
由于您只是在使用别名 std::index_sequence
,您可以更明确地这样做:
template<SizeT... Indices>
using IndexList = std::index_sequence<Indices...>;
template<SizeT N>
using MakeIndexList = std::make_index_sequence<N>;
尽管更喜欢只使用标准库中的内容。介绍你自己的名字很混乱。