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