将数组引用到引用数组

Reference over array into array of reference

我有一些 TN 的数组 std::array<T, N> arr,我想获得一个 arr 元素的引用数组,就像这样 std::array<std::reference_wrapper<T>, N> arr_ref.

但是由于需要在初始化时设置引用,所以没有想出解决办法。 因此我想做这样的事情:

std::array<std::reference_wrapper<T>, N> ref{}
for (std::size_t i{0}; i < N; ++i)
  ref[i] = arr[i];

但是在编译时和 ref 的初始化时。

我想过使用一些可变参数模板魔术将我的初始数组转换为参数包,然后引用每个元素,但我不确定这是否可行。

我最后的选择是原始指针数组或 std::optional<std::reference_wrapper<T>>

#include <array>
#include <functional>
#include <utility>
#include <cstddef>

template<typename x_Item, ::std::size_t x_count, ::std::size_t... x_index___>
auto wrap_impl(::std::array<x_Item, x_count> & items, ::std::index_sequence<x_index___...>)
{
    return ::std::array<::std::reference_wrapper<x_Item>, x_count>{items[x_index___]...};
}

template<typename x_Item, ::std::size_t x_count>
auto wrap(::std::array<x_Item, x_count> & items)
{
    return wrap_impl(items, ::std::make_index_sequence<x_count>{});
}

#include <iostream>

int main()
{
    ::std::array items{1, 2, 3};
    auto wrapped_items{wrap(items)};
    for (auto & wrapped_item: wrapped_items)
    {
        ::std::cout << wrapped_item.get() << ::std::endl;
    }
    return 0;
}

online compiler