gtk _get_type()函数实现

sap*_*sap 1 gtk gobject glib gtk3

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

eba*_*ssi 5

get_type()所有注册为GType的类型都需要该功能。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