gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:13:17 25 4
gpt4 key购买 nike

我有一个结构vec:

struct vec {
float x, y, z;
}

以及对两个 vector 进行算术运算的方法,在本例中为减法:

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

整数、 float 等的算术行为很简单:

int - int = int

但是 vec 未定义:

vec - vec = compiler errors

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

最佳答案

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

另一个问题是动态分配,它可能会变得笨拙,并且意味着您无法轻松使用堆栈变量。有几个解决方案,将分配移出减法

如果我们输入 vec :-

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

然后...

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

您可以在此基础上构建一个减法,如果您愿意,也可以进行 malloc,但这样减法将适用于动态或基于堆栈的变量。

或按值

vec subtract(vec l, vec r);

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

关于c - 有没有办法定义结构算术的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34713790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com