gpt4 book ai didi

c - 人们使用什么技术/策略在 C(不是 C++)中构建对象?

转载 作者:太空狗 更新时间:2023-10-29 17:05:11 25 4
gpt4 key购买 nike

我对旨在从 C 中使用的对象特别感兴趣,而不是构成解释语言(如 python)核心的对象的实现。

最佳答案

我倾向于做这样的事情:

struct foo_ops {
void (*blah)(struct foo *, ...);
void (*plugh)(struct foo *, ...);
};
struct foo {
struct foo_ops *ops;
/* data fields for foo go here */
};

有了这些结构定义,实现 foo 的代码看起来像这样:

static void plugh(struct foo *, ...) { ... }
static void blah(struct foo *, ...) { ... }

static struct foo_ops foo_ops = { blah, plugh };

struct foo *new_foo(...) {
struct foo *foop = malloc(sizeof(*foop));
foop->ops = &foo_ops;
/* fill in rest of *foop */
return foop;
}

然后,在使用 foo 的代码中:

struct foo *foop = new_foo(...);
foop->ops->blah(foop, ...);
foop->ops->plugh(foop, ...);

此代码可以用宏或内联函数整理,因此看起来更像 C

foo_blah(foop, ...);
foo_plugh(foop, ...);

尽管如果您坚持为“ops”字段使用一个相当短的名称,那么简单地写出最初显示的代码并不是特别冗长。

此技术完全足以在 C 中实现相对简单的基于对象的设计,但它不能处理更高级的要求,例如显式表示类和方法继承。对于这些,您可能需要类似 GObject 的东西(如 EFraim 所述),但我建议确保您确实需要更复杂框架的额外功能。

关于c - 人们使用什么技术/策略在 C(不是 C++)中构建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1225844/

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