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

zti*_*tik 1 c++ templates c++11 c++14

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

有一个界面的东西:

template<typename T, size_t N>
std::array<std::reference_wrapper<T>,N> wrap(std::array<T,N>& a);
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

注意:我不想使用矢量.

Rak*_*111 8

你可以这样做.这是一个演示.

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>());
}
Run Code Online (Sandbox Code Playgroud)