函数宏

GObjectDECLARE_INTERFACE

since: 2.44

声明 [src]

#define G_DECLARE_INTERFACE (
  ModuleObjName,
  module_obj_name,
  MODULE,
  OBJ_NAME,
  PrerequisiteName
)

说明 [src]

用于在 `GInterface` 类型的头文件中发出常规声明的实用宏。

可如下在头文件中使用该宏

#ifndef _my_model_h_
#define _my_model_h_

#define MY_TYPE_MODEL my_model_get_type ()
GDK_AVAILABLE_IN_3_12
G_DECLARE_INTERFACE (MyModel, my_model, MY, MODEL, GObject)

struct _MyModelInterface
{
  GTypeInterface g_iface;

  gpointer (* get_item)  (MyModel *model);
};

gpointer my_model_get_item (MyModel *model);

...

#endif

并在 C 文件中如下使用

G_DEFINE_INTERFACE (MyModel, my_model, G_TYPE_OBJECT);

static void
my_model_default_init (MyModelInterface *iface)
{
  ...
}

这会导致以下结果

  • 将声明常规的 `my_model_get_type()` 函数,其返回类型为 `GType`

  • 将 `MyModelInterface` 类型定义为对 `struct _MyModelInterface` 的 typedef,该结构未定义。应在使用宏后从头文件中直接进行此定义。

  • 将 `MY_MODEL()` 转换发出为 `static inline` 函数,以及 `MY_IS_MODEL()` 类型检查函数和 `MY_MODEL_GET_IFACE()` 函数。

  • 为您的类型添加 `g_autoptr()` 支持,基于您的先决条件类型。

仅当先决条件类型也支持 g_autoptr() 时才能使用此函数。

由于类型宏(上述示例中的 `MY_TYPE_MODEL`)不可调用,您必须继续自己手动定义该宏。

`_get_type()` 函数的声明是由宏首先发出的。这允许以常规方式使用此宏与导出控制和 API 版本控制宏。

自 2.44 起提供

此函数不直接可用于语言绑定。

参数

ModuleObjName

类型: -

新类型的名称,采用驼峰形式(如 `GtkWidget`)。

module_obj_name

类型: -

新类型的名称采用小写形式,单词之间用 `_` 分隔(如 `gtk_widget`)。

MODULE

类型: -

模块的名称,采用全大写形式(如 `GTK`)。

OBJ_NAME

类型: -

类型的名称,采用全大写形式(如 `WIDGET`)。

PrerequisiteName

类型: -

先决条件类型的名称,采用驼峰形式(如 `GtkWidget`)。