我已经看到了"不透明类型"的概念,但我真的没有找到一个简洁的答案,关于什么定义了C中的opaque类型,更重要的是它们允许我们用它们的存在解决的问题.谢谢
Pho*_*ong 34
它最常用于图书馆目的.C语言中Opaque类型背后的主要原则是通过其指针使用数据以隐藏数据处理实现.由于隐藏了实现,您可以修改库而无需重新编译任何依赖它的程序(如果遵循该接口)
例如:版本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(..) { ... }
Run Code Online (Sandbox Code Playgroud)
版本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(..) { ... }
Run Code Online (Sandbox Code Playgroud)
从你的程序方面来看,没有任何改变 并且如前所述,无需重新编译依赖它的每个程序.
Tim*_*tes 14
在我的理解中,opaque类型是那些允许你持有句柄(即指针)到结构,但不能直接修改或查看其内容的类型(如果你完全允许,你可以通过理解的帮助函数来实现)内部结构).
不透明类型在某种程度上是使C更加面向对象的一种方式.它们允许封装,因此类型的内部细节可以改变 - 或者在不同平台/情况下以不同方式实现 - 而不使用它的代码必须改变.