tte*_*ple 2 c++ arrays constructor
我可以做这个:
struct foo{
foo(std::array<double, 3>){}
foo(std::array<double, 4>){}
}
Run Code Online (Sandbox Code Playgroud)
我想这样做:
struct foo{
foo(double A[3]){}
foo(double A[4]){}
}
Run Code Online (Sandbox Code Playgroud)
当然,这是行不通的。
这涉及具有3和4元素双精度数组的遗留代码。我希望构造一个包含3个或4个元素数组中的4个double的类,并在从3个元素数组中构造时以恒定值初始化第4个double。当我从4个元素的数组初始化时,我只复制了4个元素。
因此,我想让构造函数识别:
double something[3];
Run Code Online (Sandbox Code Playgroud)
从:
double something_else[4];
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的方法是向构造函数添加另一个参数以区分两者。
class foo{
foo(double A[4], bool only_3 = false){}
foo(double *A, size_t n = 4){}
}
Run Code Online (Sandbox Code Playgroud)
还有更好的主意吗?
(在时间允许的情况下,我将淘汰所有原始数组,但现在我必须处理它。)
数组可以通过引用传递。如果你有
struct foo{
foo(double (&A)[3]){}
foo(double (&A)[4]){}
};
Run Code Online (Sandbox Code Playgroud)
然后foo只能从大小为3或大小为4的数组构造。这确实使您无法接受指针
double bar = new double[4];
foo f(bar);
Run Code Online (Sandbox Code Playgroud)
不会工作。