函数宏

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 起提供

此函数不直接向语言绑定提供。

参数

TN

类型: -

新类型在驼峰式中的名称。

t_n

类型: -

在小写形式中、单词由 _ 分隔的新类型名称。

T_P

类型: -

父类型的 GType

_f_

类型: -

需要传递给 g_type_register_static() 的 GTypeFlags

_C_

类型: -

插入 *_get_type() 函数中的自定义代码。