如何将可变参数列表的一部分放入另一个函数?
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);
}
请注意,前面的代码可以变得更通用。不过想通了应该没问题。
我正在处理这样的问题,我有函数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);
}
请注意,前面的代码可以变得更通用。不过想通了应该没问题。