我在 vlc 代码存储库中看到下面的代码。
/** This structure is opaque. It represents a libvlc instance */
typedef struct libvlc_instance_t libvlc_instance_t;
我在徘徊为什么结构定义是隐藏的。据我所知,这是一个开源项目,为什么选择开源整个项目时选择隐藏部分代码?
它没有被隐藏,因为他们希望它是秘密的。 它是隐藏的,因为它是一个实现细节。
在开源和其他项目中使用不透明的结构和其他机制来实现封装和实现隐藏,以确保软件版本之间一定程度的API兼容性。 例如,在存在插件架构的情况下,主软件的作者希望插件即使在更改主软件时也能继续工作而无需修改。 因此,他们以一种允许将来进行此类更改的方式隐藏了实现细节。
如果没有这些技术,插件和主机软件之间的集成将是脆弱的,并可能导致版本之间的不兼容。