Add helper function unpackIntegerSequence
This forwards all entries of a given std::integer_sequence<I,i...>
as std::integral_constant<I,i>...
argument list to a callback.
A classical usage of std::integer_sequence
is e.g. to extract tuple values.
In use cases like this, one normally has to explicitly write a helper
function which is specialized for the std::integer_sequence<I,i...>
to be able to extract the i...
as variadic list. This can then be used
to expand more complicated expressions depending on i...
. Using
unpackIntegerSequence()
improved locality by avoiding these helper functions in
favour of in-place unpacking. E.g. std::apply
can be
implemented as
template<class F, class ArgTuple>
decltype(auto) apply(F&& f, ArgTuple&& args)
{
auto indices = std::make_index_sequence<std::tuple_size<std::decay_t<ArgTuple>>::value>();
return unpackIntegerSequence([&](auto... i) {
return f(std::get<i>(args)...);
}, indices);
}
Instead of having to write a dedicated helper
template<class F, class ArgTuple, std::size_t... indices>
decltype(auto) applyHelper(F&& f, ArgTuple&& args, std::index_sequence<indices>)
I'm not aware of any existing method from std::
or Dune::
doing the trick.