函数宏
GObjectDEFINE_TYPE_EXTENDED
自 2.4 起
声明 [src]
#define G_DEFINE_TYPE_EXTENDED (
TN,
t_n,
T_P,
_f_,
_C_
)
说明 [src]
type 实现最通用的便捷宏,G_DEFINE_TYPE() 等基于此宏。
G_DEFINE_TYPE_EXTENDED (GtkGadget,
gtk_gadget,
GTK_TYPE_WIDGET,
0,
G_ADD_PRIVATE (GtkGadget)
G_IMPLEMENT_INTERFACE (TYPE_GIZMO,
gtk_gadget_gizmo_init));
展开为
static void gtk_gadget_init (GtkGadget *self);
static void gtk_gadget_class_init (GtkGadgetClass *klass);
static gpointer gtk_gadget_parent_class = NULL;
static gint GtkGadget_private_offset;
static void gtk_gadget_class_intern_init (gpointer klass)
{
gtk_gadget_parent_class = g_type_class_peek_parent (klass);
if (GtkGadget_private_offset != 0)
g_type_class_adjust_private_offset (klass, &GtkGadget_private_offset);
gtk_gadget_class_init ((GtkGadgetClass*) klass);
}
static inline gpointer gtk_gadget_get_instance_private (GtkGadget *self)
{
return (G_STRUCT_MEMBER_P (self, GtkGadget_private_offset));
}
GType
gtk_gadget_get_type (void)
{
static GType static_g_define_type_id = 0;
if (g_once_init_enter_pointer (&static_g_define_type_id))
{
GType g_define_type_id =
g_type_register_static_simple (GTK_TYPE_WIDGET,
g_intern_static_string ("GtkGadget"),
sizeof (GtkGadgetClass),
(GClassInitFunc) gtk_gadget_class_intern_init,
sizeof (GtkGadget),
(GInstanceInitFunc) gtk_gadget_init,
0);
{
GtkGadget_private_offset =
g_type_add_instance_private (g_define_type_id, sizeof (GtkGadgetPrivate));
}
{
const GInterfaceInfo g_implement_interface_info = {
(GInterfaceInitFunc) gtk_gadget_gizmo_init
};
g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
}
g_once_init_leave_pointer (&static_g_define_type_id, g_define_type_id);
}
return static_g_define_type_id;
}
唯一必须手动提供的部分是实例和类结构的定义,以及实例和类 init 函数的定义。
自 2.4 起提供
此函数不直接向语言绑定提供。