如何对使用 G_DECLARE_DERIVABLE_TYPE (glib/gobject) 定义的类进行子类化

Posted

技术标签:

【中文标题】如何对使用 G_DECLARE_DERIVABLE_TYPE (glib/gobject) 定义的类进行子类化【英文标题】:How to subclass a class defined with G_DECLARE_DERIVABLE_TYPE (glib/gobject) 【发布时间】:2021-10-23 07:55:35 【问题描述】:

一些颤振代码会这样做:

G_BEGIN_DECLS

G_DECLARE_DERIVABLE_TYPE(FlTextureGL, fl_texture_gl, FL, TEXTURE_GL, FlTexture)

  gboolean (*populate)(FlTextureGL* texture,
                       uint32_t* target,
                       uint32_t* name,
                       uint32_t* width,
                       uint32_t* height,
                       GError** error);
;

我必须继承 FlTextureGL 类并定义 populate 函数。

如何继承G_DECLARE_DERIVABLE_TYPE 定义的类?如何定义方法populate

【问题讨论】:

【参考方案1】:

您可以按照tutorial 了解如何使用 GObject 进行子类化,但简短的回答是您需要在自己的代码中使用 G_DEFINE_TYPE 系列宏。

要定义populate 方法,请在class_init 函数中设置函数指针的值:

static void
my_type_class_init (MyTypeClass *klass)

  FlTextureGLClass *fl_texture_gl_class = FL_TEXTURE_GL_CLASS (klass);
  fl_texture_gl_class->populate = my_type_populate;

  /* ... */

【讨论】:

以上是关于如何对使用 G_DECLARE_DERIVABLE_TYPE (glib/gobject) 定义的类进行子类化的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Matlab 按字母顺序对属性值对进行排序

如何使用 JMeter 对 Websocket 进行负载测试?

如何对函数的输出使用索引? [复制]

如何使用优先队列对链表进行排序

如何对大数使用格式化

如何使用 SVM 对图像进行分类