函数宏
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 起提供
此函数不直接可用于语言绑定。