函数宏

GObjectDEFINE_DYNAMIC_TYPE_EXTENDED

自:2.14

声明 [源代码]

#define G_DEFINE_DYNAMIC_TYPE_EXTENDED (
  TypeName,
  type_name,
  TYPE_PARENT,
  flags,
  CODE
)

描述 [源代码]

G_DEFINE_DYNAMIC_TYPE() 的更通用版本,允许指定 `GTypeFlags` 和自定义代码。

G_DEFINE_DYNAMIC_TYPE_EXTENDED (GtkGadget,
                                gtk_gadget,
                                GTK_TYPE_THING,
                                0,
                                G_IMPLEMENT_INTERFACE_DYNAMIC (TYPE_GIZMO,
                                                               gtk_gadget_gizmo_init));

展开为

static void     gtk_gadget_init              (GtkGadget      *self);
static void     gtk_gadget_class_init        (GtkGadgetClass *klass);
static void     gtk_gadget_class_finalize    (GtkGadgetClass *klass);

static gpointer gtk_gadget_parent_class = NULL;
static GType    gtk_gadget_type_id = 0;

static void     gtk_gadget_class_intern_init (gpointer klass)
{
  gtk_gadget_parent_class = g_type_class_peek_parent (klass);
  gtk_gadget_class_init ((GtkGadgetClass*) klass);
}

GType
gtk_gadget_get_type (void)
{
  return gtk_gadget_type_id;
}

static void
gtk_gadget_register_type (GTypeModule *type_module)
{
  const GTypeInfo g_define_type_info = {
    sizeof (GtkGadgetClass),
    (GBaseInitFunc) NULL,
    (GBaseFinalizeFunc) NULL,
    (GClassInitFunc) gtk_gadget_class_intern_init,
    (GClassFinalizeFunc) gtk_gadget_class_finalize,
    NULL,   // class_data
    sizeof (GtkGadget),
    0,      // n_preallocs
    (GInstanceInitFunc) gtk_gadget_init,
    NULL    // value_table
  };
  gtk_gadget_type_id = g_type_module_register_type (type_module,
                                                    GTK_TYPE_THING,
                                                    "GtkGadget",
                                                    &g_define_type_info,
                                                    (GTypeFlags) flags);
  {
    const GInterfaceInfo g_implement_interface_info = {
      (GInterfaceInitFunc) gtk_gadget_gizmo_init
    };
    g_type_module_add_interface (type_module, g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
  }
}

自 2.14 起可用

此函数不能直接在语言绑定中使用。

参数

TypeName

类型: -

新类型以骆驼格式命名的名称。

type_name

类型: -

新类型以小写形式命名的名称,用‘_’分隔单词。

TYPE_PARENT

类型: -

父类型的 `GType`。

flags

类型: -

要传递给 g_type_module_register_type() 的 `GTypeFlags`。

CODE

类型: -

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