template<typename T>
void pack(T const& value) { ... }
// Вариант 1 через дополнительную функцию и выражения свёртки
template <typename Tuple, std::size_t... Is>
void pack_impl(Tuple const& tup, std::index_sequence<Is...>)
{
(pack(std::get<Is>(tup)), ...);
}
template<template<typename... Ts> class Tuple, typename... Types>
void pack1(Tuple<Types...> const& tup)
{
pack_impl(tup, std::index_sequence_for<Types...>{});
}
// Вариант 2 через std::apply
template<template<typename... Ts> class Tuple, typename... Types>
void pack2(Tuple<Types...> const& tup)
{
std::apply([](auto && ... args) { (pack(std::forward<decltype(args)>(args)), ...); }, tup);
}
int main()
{
int arr[] = { 1,2,3 };
pack(std::tie(arr));
}
Как можно улучшить этот код ?
Хотелось бы иметь возможность раскрыть tuple по месту без дополнительной функции.