C ++中运算符的固定大小数组

fixed-size array for operators in c++

我已经尝试了几个小时了。我找不到将固定大小的数组传递给运算符的方法。我在 Whosebug 上找到了一些东西并尝试了它,正如您在我的代码中看到的那样,但它根本不起作用。任务是,如果数组的大小不是 3,则不应编译代码,这意味着,如果数组的大小是 2 或 4,我应该得到一个编译错误。有人可以告诉我如何实现吗?提前致谢! :)

class Vec3 {
private:
int x, y, z;
public:
Vec3 (int x, int y, int z) : x(x), y(y), z(z) {}
int getX () const
{
    return x;
}
int getY () const
{
    return y;
}
int getZ () const
{
    return z;
}
};

Vec3 operator+(Vec3 &vec, int (*arr)[3]) {
int x,y,z;
x = vec.getX() + (*arr)[0];
y = vec.getY() + (*arr)[1];
z = vec.getZ() + (*arr)[2];
Vec3 result(x,y,z);
return result;
}

int main () {
Vec3 v1 (1,2,3);
int  v3 [] = {2,4,6};

cout << "v1 + v3 = " << v1 + v3 << endl;

return 0;
}

使用模板来做:

template<size_t N>
Vec3 operator+(Vec3 &vec, int (&arr)[N]) {
    static_assert(N==3,"wrong size of array");
    // the rest of the code , small fix: arr[0] etc 

当N不等于3时触发static assert

Demo

你的语法有点错误。而不是

Vec3 operator+(Vec3 &vec, int (*arr)[3])

必须是

Vec3 operator+(Vec3 &vec, int (&arr)[3])

通过引用传递数组。你可以在数组访问之前删除运算符的值(*),所以你最终得到

Vec3 operator+(Vec3 &vec, int (&arr)[3]) {
    int x,y,z;
    x = vec.getX() + arr[0];
    y = vec.getY() + arr[1];
    z = vec.getZ() + arr[2];

    Vec3 result(x,y,z);

    return result;
}