template<typename Array, std::size_t... Index>
decltype(auto) array2tuple_impl(const Array& a, std::index_sequence<Index...>)
{
return std::make_tuple(a[Index]...);
}
template<typename T, std::size_t N>
decltype(auto) array2tuple(const std::array<T, N>& a)
{
return array2tuple_impl(a, std::make_index_sequence<N>{});
}
使用:
std::array<int, 4> a { 1, 2, 3, 4 };
auto t = array2tuple(arr);
这里用到了C++14的std::index_sequence,std::index_sequence很有用,它可以将std::array和std::tuple转换成序列。