我看过一些“不透明类型”的概念,但我真的没有找到一个简洁的答案,比如在C中是什么定义了不透明类型,更重要的是,它们允许我们用它们的存在来解决什么问题。谢谢
发布于 2010-02-20 15:45:47
它是最常用的库用途。在c中,不透明类型背后的主要原理是通过指针使用数据,以便隐藏数据处理实现。由于实现是隐藏的,您可以修改该库,而无需重新编译依赖于它的任何程序(如果该接口受到尊重)
例如:版本1:
// header file
struct s;
int s_init(struct s **x);
int s_f(struct s *x);
int s_g(struct s *x);
// source file
struct s { int x; }
int s_init(struct s **x) { *x = malloc(...); }
int s_f(..) { ... }
int s_g(..) { ... }版本2
// header file
struct s;
int s_init(struct s **x);
int s_f(struct s *x);
int s_g(struct s *x);
// source file
struct s { int y; int x; }
int s_init(struct s **x) { *x = malloc(...); }
int s_f(..) { ... }
int s_g(..) { ... }在你的程序方面,什么都没有改变!如前所述,不需要重新编译每个依赖它的程序。
发布于 2010-02-20 15:41:29
在我的理解中,不透明类型是那些允许你持有一个结构的句柄(即指针),但不能直接修改或查看其内容的类型(如果你被允许的话,你可以通过理解内部结构的助手函数来做到这一点)。
在某种程度上,不透明类型是使C更加面向对象的一种方式。它们允许封装,因此类型的内部细节可以更改--或者在不同的平台/情况下以不同的方式实现--而不需要更改使用它的代码。
发布于 2010-02-20 15:41:34
不透明类型是一种在API中通过指针公开但从未具体定义的类型。
https://stackoverflow.com/questions/2301454
复制相似问题