我有一个结构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
?
答案 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);
值可能最适合你的小结构,但是,这取决于你。