在GObject Manual的 Boilerplate代码一章中,当使用 G_DECLARE_FINAL_TYPE 将ViewerFile声明为最终类型时,我们如何向其添加公共数据,因为它隐藏在 viewer-file.c 后面,不包括在内?
答案 0 :(得分:3)
“可派生”GObject类型和“最终”GObject类型之间的主要区别是实例数据结构的可见性。
如果GObject类型是“可派生的”,那么你只能使用私有实例数据结构,因为实例结构是公共的,它的生成只是包含父结构。
如果GObject类型是“final”,那么您只获取实例字段,因为实例数据结构对您的C源文件是私有的。
除非您决定不使用宏并手动编写样板文件,否则不能混合使用这两种方法。
此外,您不应该曾访问实例数据结构上的字段;相反,提供访问者功能,以便您可以安全地验证前置条件和后置条件。