Это на самом деле довольно просто: Вы можете поместить произвольное выражение внутри распаковки с VARIADIC шаблонов аргументов пакета:
obj.apply(someFilter(arg))...
Это даст вам результат obj.apply
как кома отделено список. Затем вы можете передать его фиктивной функции:
template<typename... Args> swallow (Args&&...) {}
swallow(obj.apply(someFilter(arg))...);
Чтобы проглотить запятыми список.
Конечно, это предполагает, что obj.apply
возвращает какой-то объект. Если вы не можете использовать
swallow((obj.apply(someFilter(arg)), 0)...);
сделать фактические (не являющиеся void
) аргументов
Если вы не знаете, что obj.apply` возвращается (результат может быть перегружен оператор запятой), вы можете отключить использование операторов пользовательских разделителей с помощью
swallow((obj.apply(someFilter(arg)), void(), 0)...);
Если вы на самом деле нужно, чтобы оценить детали в порядке (что не кажется, весьма вероятно, от вопроса), вы можете злоупотребить синтаксис инициализации массива, вместо того, чтобы использовать вызов функции:
using Alias=char[];
Alias{ (apply(someFilter(args)), void(), '\0')... };
Когда вы говорите о распаковке, вы имеете в виду, что ваш единственный аргумент arg должен быть распакован в несколько аргументов? – souldzin