2017-07-14 66 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源文件是私有的。

你不能混合這兩種方法,除非你決定使用宏而不是來使用這些宏並手工編寫樣板文件。

此外,您不應該在實例數據結構上存在訪問字段;提供訪問器功能,以便您可以安全地驗證前置條件和後置條件。

相關問題