如何使用公共成员和私有成员创建GObject最终类?

时间:2017-07-14 05:02:42

标签: c oop glib gobject

GObject Manual Boilerplate代码一章中,当使用 G_DECLARE_FINAL_TYPE 将ViewerFile声明为最终类型时,我们如何向其添加公共数据,因为它隐藏在 viewer-file.c 后面,不包括在内?

1 个答案:

答案 0 :(得分:3)

“可派生”GObject类型和“最终”GObject类型之间的主要区别是实例数据结构的可见性。

如果GObject类型是“可派生的”,那么你只能使用私有实例数据结构,因为实例结构是公共的,它的生成只是包含父结构。

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

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

此外,您不应该访问实例数据结构上的字段;相反,提供访问者功能,以便您可以安全地验证前置条件和后置条件。