我正在处理这样一个问题,我有函数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
变量参数数,我怎么得到它?
初始化列表似乎没有接受一对迭代器的构造函数,参见这里。但是你可以使用span:
#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);
}
演示注意,前面的代码可以更通用。但是应该可以理解这个想法。