gtk _get_type()函数实现

时间:2013-12-13 04:29:07

标签: gtk glib gtk3 gobject

我刚开始学习GTK。我正在浏览gtk + 3.0.0的源代码,我发现某些gtk对象类型的_get_type()方法的实现,但有些没有这种方法的实现,例如GtkRange。这有什么理由吗?据我在GObject参考手册中所理解,_get_type()方法在类型系统中注册对象类型。

1 个答案:

答案 0 :(得分:5)

注册为GType的所有类型都需要get_type()函数。 GObject(库)提供了方便的宏来生成正确的get_type()函数实现,同时考虑了线程安全初始化或动态类型注册等事项。

用于GObject(类型)子类的宏是G_DEFINE_TYPE(),但在GTK +中你也会找到G_DEFINE_TYPE_WITH_CODE(),通常在类型也实现接口时使用; G_DEFINE_ABSTRACT_TYPE()G_DEFINE_ABSTRACT_TYPE_WITH_CODE(),用于抽象类型;最近,G_DEFINE_TYPE_WITH_PRIVATE()G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(),它们使用私有数据定义GObject子类,避免在类初始化函数内调用g_type_class_add_private()

盒装类型(普通旧结构周围的GType包装器)也有G_DEFINE_BOXED_TYPE(),接口类型有G_DEFINE_INTERFACE()

GObject的API参考中提供了更多信息:

https://developer.gnome.org/gobject/stable/gobject-Type-Information.html#G-DEFINE-TYPE:CAPS