gpt4 book ai didi

c - 结构接口(interface)

转载 作者:行者123 更新时间:2023-12-04 11:17:49 24 4
gpt4 key购买 nike

当您定义一个新的struct 时,最好同时定义一个该类型的接口(interface)
(即“setter”和“getter”函数)或通过 .-> 运算符直接访问成员?

编辑
纯 C 编程

最佳答案

这取决于你的结构是否是抽象数据类型。如果您在 header 中公开结构定义,那么定义访问器就没有任何意义 - API 客户端仍然可以直接读/写字段,并且在 C 中,他们确实有合理的期望它会起作用。

另一方面,您可能希望完全隐藏结构,只向客户端显示它的声明,作为一种不透明的句柄:

foo.h:

typedef struct foo foo;

foo* foo_create();
void foo_free(foo*);
int foo_get_bar(foo*);
void foo_set_bar(foo*, int);

foo.cpp:

struct foo { 
int bar;
};

foo* foo_create() { return malloc(sizeof(foo)); }

void foo_free(foo* p) { free(p); }

int foo_get_bar(foo* p) { return p->bar; }

void foo_set_bar(foo* p, int newval) { p->bar = nwval; }

客户端.cpp:

#include "foo.h"

foo* f = foo_create();
f->bar = 123; // compile error, bar is not defined
foo_set_bar(f, 123); // ok

这样做的原因是 1) 封装,与 OO 中相同,以及 2) 版本控制 - 您可以向结构中添加新字段,或自由地重新组织它们,而旧代码将保持二进制兼容。

关于c - 结构接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1784652/

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