Представьте, что у меня есть контейнер, похожий на std::vector<std::tuple<Ts...>>
.
Исходя из этого, я хотел бы получить "view
" (без копирования) для всех T
, чтобы я мог работать с этим видом, как если бы он был стандартным * Контейнер 1007 *.
Итак, что бы я хотел иметь:
using tuple_vector = std::vector<std::tuple<int,float,double>>;
tuple_vector tuple_vec = {{1, 4.f, 8.},
{2, 5.f, 9.},
{3, 6.f, 10.},
{4, 7.f, 11.}}
auto int_view = view<int>(tuple_vec);
^^^
type should be some kind of non-owning reference
// what I would like to do
int_view[0] = 10; // modify
assert(int_view[0] == std::get<int>(tuple_vec[0])); // modification should modify tuple_vec as well
Я попытался std::transform
, но затем я получил копию всех int
.
std::vector<int> int_vec(tuple_vec.size());
std::transform(tuple_vec.begin(), tuple_vec.end(), int_vec.begin(), [&](const auto& elem) {
return std::get<int>(elem);
});
Я не уверен, возможно ли это вообще, но если это так, я был бы признателен за любые советы или указания.