将元素数组转换为reference_wrappered元素数组

时间:2018-03-27 08:46:44

标签: c++ c++11 templates c++14

我有一些元素的数组。 我想创建一个函数,它将生成一个包含元素引用的reference_wrapper数组。

具有如下界面的东西:

template<typename T, size_t N>
std::array<std::reference_wrapper<T>,N> wrap(std::array<T,N>& a);

最好的方法是什么?

注意:我不想使用矢量。

1 个答案:

答案 0 :(得分:8)

你可以这样做。这是一个demo

namespace detail {
    template<typename T, std::size_t N, std::size_t... Index>
    std::array<std::reference_wrapper<T>, N> wrap(std::array<T, N>& a,
                                                  std::index_sequence<Index...>) {
        return {a[Index]...};
    }
}

template<typename T, size_t N>
std::array<std::reference_wrapper<T>,N> wrap(std::array<T,N>& a) {
    return detail::wrap(a, std::make_index_sequence<N>());
}