有没有办法定义结构算术的行为?

时间:2016-01-11 03:30:39

标签: c struct

我有一个结构vec

struct vec {
    float x, y, z;
}

对两个向量进行算术运算的方法,在本例中为减法:

vec* sub(vec* a, vec* b) {
    struct vec* new = (vec*)malloc(sizeof(struct vec));
    new->x = a->x - b->x;
    new->y = a->y - b->y;
    new->z = a->z - b->z;
    return new;
}

使用整数,浮点数等算术的行为很简单:

int - int = int

但是vec未定义:

vec - vec = compiler errors

有没有办法在结构上定义操作数的行为?假设我只想输入new = a - b,有没有办法配置它以使该行执行函数sub

1 个答案:

答案 0 :(得分:1)

这就是C ++为您提供的。在C中,你坚持使用调用sub。

另一个问题是动态分配,它可以变得笨重,意味着你不能轻易地使用堆栈变量。几个解决方案,将分配移出减法

如果我们输入vec: -

  typedef struct  { float x, y, z;} vec;

...然后

vec* subtract(vec* l, vec *r, vec *result);

如果你愿意的话,你可以在这个上面构建一个减去on mallocs的减法,但这样减法将适用于基于动态或基于堆栈的变量。

或按值

vec subtract(vec l, vec r);

值可能最适合你的小结构,但是,这取决于你。