我有一个带有带有三个参数的构造函数的类
class Foo{
public: Foo(int, double[], double[]);
};
Foo::Foo(int a, double b[], double c[]){
// function
}
现在我要尝试的是使用具有固定数字的数组来调用此类 例如
Foo(4, [4.1, 2.5, 7.2], [5.5, 6.1, 3.8]);
但是这不起作用。这样的语法在c ++中是否可行,还是必须更改?
我尝试通过在喜欢之前声明数组变量来完成它
double x[5];
x[0] = 4.1;
x[1] = 2.5;
x[2] = 7.2;
Foo(4, x, x);
这可行,但要花很多时间,因为我想创建多个此类,如果有更好的方法,这会使我的代码变得更大且不必要。
预先感谢
答案 0 :(得分:4)
我建议使用标准库容器:
class Foo{
public:
Foo(int, const std::vector<double>& vv ) : v(vv)
{
// other stuff here
}
std::vector<double> v;
};
您可以使用aggregate initialization通过这种方式传递值:
int main()
{
Foo f( 1, {1.1,1.2,1.3} );
}
如果编译时大小固定,则使用std::array
。
答案 1 :(得分:2)
在这种情况下,std::initializer_list是最佳选择。
class Foo{
public:
Foo(int n, std::initializer_list<double> a, std::initializer_list<double> b);
};
Foo foo { 32, {}, { 2, 3, 1, 2 }};
答案 2 :(得分:1)
使用[]
声明列表将不起作用。但是您可以使用brace enclosed initializer lists:
double b[] = {1.0, 2.0};
double c[] = {5.3, 4.7};
Foo f = Foo(1, b, c);
但是请注意,您不能这样做:
Foo f = Foo(1, {1.0, 2.0}, {5.3, 4.7});
为什么?因为初始化列表无法将内联转换为数组。您必须显式声明数组。如果要内联执行此操作,请使用std::vector<double>
。