User Tools

Site Tools


cpp:tuple

Tuple

snippet.cpp
#include <array>
#include <tuple>
#include <variant>
#include <iostream>
#include <functional>
 
using std::tuple;
using std::array;
using std::variant;
using std::cout;
 
#include "MyData.h"
 
template<size_t... Is, typename... Ts>
array<variant<std::reference_wrapper<Ts>...>, sizeof...(Ts)> convert_impl(tuple<Ts...>& in, std::index_sequence<Is...>)
{
  return {{variant<std::reference_wrapper<Ts>...>(std::in_place_index_t<Is>{}, std::ref(std::get<Is>(in)))...}};
}
 
template<typename... Ts>
array<variant<std::reference_wrapper<Ts>...>, sizeof...(Ts)> convert(tuple<Ts...>& in)
{
  return convert_impl(in, std::make_index_sequence<std::tuple_size_v<tuple<Ts...>>>{});
}

usage

usage

int main()
{
  tuple<MyData<int>, int, double> t{5, 23, 42.0};

  for (const auto& i : convert(t))
  {
    std::visit([](auto& i)
               {
                   cout << "value: " << i << '\n';
                   ++i.get();
               }, i);
  }

  cout << "0: " << std::get<0>(t) << '\n';
  cout << "1: " << std::get<1>(t) << '\n';
  cout << "2: " << std::get<2>(t) << '\n';

    return 0;
}
cpp/tuple.txt · Last modified: by allspark