Я хочу переназначить пакет параметров в пакет параметров другого типа. Точнее, у меня есть функция:
template<typename ...type_pack, typename Function = void(type_pack&&...)>
constexpr decltype(auto) zip(Function&& op, type_pack&&... pack)
{
static_for<0, N_lhs>([&](auto i)
{
op(pack[i]...);
});
return;
}
По сути, я хочу создать пакет параметров с применением []
к элементам пакета. Обратите внимание, что i
здесь является интегральной константой, а static_for это время компиляции, вы можете предположить, что []
равно constexpr
. У меня нет большого контроля над op
, поэтому он ожидает пакет параметров, а не кортеж.
Редактировать:
Похоже, я был под недопониманием того, что op(pack[i]...)
вызывалпроблема, когда на самом деле это легальная конструкция C ++ (я думал, что это незаконно). Похоже, что-то не так с моим циклом static_for. Мой вопрос изначально касался op(pack[i]...)
, поэтому я оставлю его как есть.
Я подготовил более общий пример, не использующий []
, но другую произвольную функцию только для проверки работоспособности: https://godbolt.org/z/h8Hbbt
Есть ли в стандарте место, где упоминается это поведение расширения пакета, а именно тот факт, что функции могут применяться поверх?