如何使用具有已注册 GType 而非 GObject 类型值的属性?
How to use properties with values of a type that is a registered GType, but not a GObject?
我想在基于 class 的自定义 GObject 上定义属性,属性 的类型为 GstStructure *
。这是注册的 GType,但不是 GObject 的子class。属性设置和检索为 GValue
,但 GValue 似乎不支持 GType
值。可以创建一个 g_param_spec_gtype
,但该工厂函数的 GType 参数称为 is_a_type
,这令人困惑,因为它暗示布尔值,所以我不确定这种类型的参数规范是什么为了。我应该只将它注册为指针并为了简单而牺牲一些类型安全性,还是应该使用 GBoxed?
GType
的 GParamSpec
用于存储实际的 GType
值,而不是用于存储在类型系统中注册的类型的实例。
GLib 没有为基本的可实例化类型提供 GParamSpec
——即从 GTypeInstance
继承但不从 GObject
派生的类型——因为 GLib 对它们一无所知:它们是一个单独的层次结构。
如果一个库为您提供基本的可实例化类型,那么该库还应该为您提供:
GValue
包装器,用于属性和信号中的装箱和拆箱实例
- 一个
GParamSpec
类型和一个 API 来定义 GObject 属性
GstStructure
类型是引用计数的普通旧数据类型,它继承自 GBoxed
;这意味着您可以使用 g_param_spec_boxed()
来定义一个包含 GstStructure
实例的 属性。
我想在基于 class 的自定义 GObject 上定义属性,属性 的类型为 GstStructure *
。这是注册的 GType,但不是 GObject 的子class。属性设置和检索为 GValue
,但 GValue 似乎不支持 GType
值。可以创建一个 g_param_spec_gtype
,但该工厂函数的 GType 参数称为 is_a_type
,这令人困惑,因为它暗示布尔值,所以我不确定这种类型的参数规范是什么为了。我应该只将它注册为指针并为了简单而牺牲一些类型安全性,还是应该使用 GBoxed?
GType
的 GParamSpec
用于存储实际的 GType
值,而不是用于存储在类型系统中注册的类型的实例。
GLib 没有为基本的可实例化类型提供 GParamSpec
——即从 GTypeInstance
继承但不从 GObject
派生的类型——因为 GLib 对它们一无所知:它们是一个单独的层次结构。
如果一个库为您提供基本的可实例化类型,那么该库还应该为您提供:
GValue
包装器,用于属性和信号中的装箱和拆箱实例- 一个
GParamSpec
类型和一个 API 来定义 GObject 属性
GstStructure
类型是引用计数的普通旧数据类型,它继承自 GBoxed
;这意味着您可以使用 g_param_spec_boxed()
来定义一个包含 GstStructure
实例的 属性。