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

问题描述 投票:0回答:2

我已经尝试了几个小时。我找不到将固定大小的数组传递给运算符的方法。正如您在我的代码中看到的那样,我在stackoverflow上找到了一些东西,并尝试了这种方法,但它根本无法工作。任务是,如果数组的大小不为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;
}
c++ arrays size operator-keyword fixed
2个回答
2
投票

您的语法略有错误。代替

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;
}

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时将触发静态断言。

Demo

© www.soinside.com 2019 - 2024. All rights reserved.