Выражения свёртки без дополнительной функции
От: _NN_ www.nemerleweb.com
Дата: 18.04.19 11:55
Оценка:
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 по месту без дополнительной функции.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.