如何将可变参数列表的一部分放入另一个函数?

How to put a part of variable argument list into another function?

我正在处理这样的问题,我有函数f(std::initializer_list<double> list),我想将可变参数列表的一部分(第二个可变参数结束)放入另一个函数中,如:

void f(std::initializer_list<double> list){
    f1(*(list.begin()+1,...,*(list.end-1));
}

f1函数是像void f1(double x)void f1(double x1,double x2)一样的普通函数,我希望f可以使用f1的不同变量参数,如何我能拿到吗?

初始化列表似乎没有采用一对迭代器的构造函数,请参阅 here。但是您可以为此使用跨度:

#include<iostream>
#include<span>

void f1(double a, double b)
{
}

void f2(auto list)
{
    for(auto i : list)
    {
        std::cout<<i<<std::endl;
    }
}

void f(std::initializer_list<double> list){
    size_t size = std::distance(std::begin(list),std::end(list))-1;
    auto list = std::span{std::next(std::begin(list)), size};
    f1(list[0],list[1]);
    f2(list);
}

int main()
{
    auto a = std::initializer_list<double>{1.0,2.0,3.0};
    f(a);
}

DEMO

请注意,前面的代码可以变得更通用。不过想通了应该没问题。