这实际上很简单:您可以将任意表达式放入可变参数模板参数包的解包中:
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')... };