递增参数包中的每个值

问题描述

我目前正在尝试递增某个未知类型的充满std :: vector :: iterator的参数包中的每个值。我目前正在努力弄清...语法的工作方式。我本来以为增加每个值为++input_starts ...的值,但这只会给我带来编译器错误。以下是整个功能供参考:

template<
    typename RETURN,typename ... INPUTS
>
void thread_instance(std::function<RETURN(INPUTS ...)> function,typename std::vector<RETURN>::iterator output_start,typename std::vector<RETURN>::iterator output_end,INPUTS ... input_starts)
{
    for (; output_start != output_end; ++output_start,++input_starts ...)
    {
        *output_start = function(*input_starts ...);
    }
}

解决方法

替换此:

++input_starts ...

与此:

(++input_starts,...)

这是C ++ 17 fold expression(您的用例类似于该页面上的push_back_vec()示例)。

简单的演示:https://godbolt.org/z/YoY4b1