2017-07-14 77 views
1

在章样板代码GObject Manual,当ViewerFile声明为使用G_DECLARE_FINAL_TYPE final类型,我们如何才能增加公共数据到它,因为它是隐藏其中不包括观众-file.c背后?如何用公共和私人成员创建一个GObject最终课程?

+0

一般而言,您应该提供访问数据的函数,而不是让外部代码直接访问结构成员。 GNOME已经这样做了一段时间了(有关过渡的详细信息,请参阅https://wiki.gnome.org/Initiatives/GnomeGoals/UseGseal)。 – nemequ

回答

3

“可导出”GObject类型和“最终”GObject类型之间的主要区别在于实例数据结构的可见性。

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

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

你不能混合这两种方法,除非你决定使用宏而不是来使用这些宏并手工编写样板文件。

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

相关问题