采用不同大小数组的构造函数

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)

还有更好的主意吗?

(在时间允许的情况下,我将淘汰所有原始数组,但现在我必须处理它。)

Nat*_*ica 5

数组可以通过引用传递。如果你有

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)

不会工作。