如何创建具有 public 和私有成员的 GObject final class?

How to create a GObject final class with both public and private members?

GObject Manual 样板代码 一章中,当使用 G_DECLARE_FINAL_TYPE[=18= 将 ViewerFile 声明为最终类型时], 我们如何向它添加 public 数据,因为它隐藏在未包含的 viewer-file.c 后面?

"derivable" GObject 类型和 "final" GObject 类型之间的主要区别在于实例数据结构的可见性。

如果 GObject 类型是 "derivable" 那么您只能使用私有实例数据结构,因为实例结构是 public 并且生成它只包含父结构。

如果 GObject 类型是 "final" 那么您只能获得实例字段,因为实例数据结构对您的 C 源文件是私有的。

您不能混合使用这两种方法,除非您决定使用宏并手动编写样板文件。

此外,您不应该永远访问实例数据结构上的字段;相反,提供访问器函数,以便您可以安全地验证前提条件和 post 条件。