gpt4 book ai didi

c - C语言中如何获取父对象?

转载 作者:行者123 更新时间:2023-11-30 21:19:08 26 4
gpt4 key购买 nike

我需要在C中做到这一点。

我有一个带有属性 x 的 typedef 结构,我将从 typedef 结构创建许多结构。我如何从属性引用给定的父结构。实际上,这个 x 是一个函数,该函数需要知道另一个属性 y 是什么。

如何在 Javascript 中执行此操作

this.super

我的代码

#define NOTHING

typedef struct $ {
int (*x)(void);
int Y NOTHING;
} $;
int AddOneToParentY (void) {
//return This.super.Y +1; but in c instead of js
};

$ struct1 = {
.X = AddOneToParentY,
.Y = 3 NOTHING
};

$ struct2 = {
.X = AddOneToParentY,
.Y = 32 NOTHING
};

//When I call struct2.AddOneToParentY I should get 33

如何做到这一点?也许有 POUND 定义宏的东西?

最佳答案

我认为您要求的是 C++ 成员函数的 this 指针的类似物(相当于 Java 实例方法的 this 引用)。但 C 没有类似的成员函数或实例方法。更一般地说,它没有专门针对 OOP 的内置功能——毕竟,这就是 C++ 从 C fork 出来的原因。

C 结构可以有一个指向函数的指针的成员,但是通过这样的指针调用该函数与直接调用它或通过指向它的不同指针调用它没有什么不同。没有区别,因此无法判断哪个指针用于标识该函数,更不用说哪些数据可能与其相关或存储在附近。

通常的 C 替代方案本质上是为需要的函数提供一个显式的 this 指针(尽管它可以使用您喜欢的任何名称),并显式地传递它。另外,这可能会减少或消除在结构中存储指向它的指针的有用性。例如:

typedef struct {
double x, y, radius;
} circle;

double computeArea(circle *c) {
return c->radius * c->radius * 3.14159;
}

void moveTo(circle *c, double new_x, double new_y) {
c->x = new_x;
c->y = new_y;
}

int main(void) {
circle a_circle = { .x = 1, .y = 1, .radius = 2 };

printf("The area is %f\n", computeArea(&a_circle));
}

关于c - C语言中如何获取父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56941113/

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