【问题标题】:Get parent class in Gobject在 Gobject 中获取父类
【发布时间】:2012-10-20 00:34:24
【问题描述】:

我是 GObject 的新手。我对获取一个类的父亲的指针感到困惑。例如, 在 Gobject Spec 上,我们有一个类:

struct _MamanBarClass {
  GObjectClass parent;

  /* class members */
};

有什么区别:

MamanBarClass klass;
GObjectClass parent_class=G_OBJECT_CLASS(g_type_class_peek_parent (klass));

MamanBarClass klass;
GObjectClass g_object_class=G_OBJECT_CLASS(klass);

g_object_classparent_class有什么区别

还有一个问题: MamanBarClass(klass)MAMANBARCLASS(klass) 之间的区别 谢谢!

【问题讨论】:

    标签: glib gobject


    【解决方案1】:

    在 GObject 中,任何新类型都会在寄存器中保存类结构,以保存运行时信息、虚拟方法和私有类数据。

    转换 (G_OBJECT_CLASS(klass)) 用于检索 klass 的 GObjectClass,而G_OBJECT_CLASS(g_type_class_peek_parent(klass)) 返回 klass 父级 的 GObjectClass。在您的示例中,前者仅返回 MamanBarClass 的 GObjectClass 结构,而后者返回在寄存器中找到的 GObjectClass 结构( MamanBarClass 的父级)的 GObjectClass 结构。在实践中:

    klass = G_OBJECT_CLASS(maman_bar_class);
    /* This will override MamanBar::dispose */
    klass->dispose = my_dispose;
    /* Now my_dispose will be called by g_object_dispose(object) when object is a MamanBar object */
    
    klass = G_OBJECT_CLASS(g_type_class_peek_parent(klass));
    /* This will override GObject::dispose */
    klass->dispose = my_dispose
    /* Now my_dispose will be called by g_object_dispose(object) when object is a GObject (the parent class of MamanBar) object */
    

    (MamanBarClass *) klassMAMAN_BAR_CLASS(klass) 是等价的,但后者执行运行时类型检查(如果 klass 不是 MamanBarClass *,则发出 g_critical。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2010-12-09
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 2013-01-24
    相关资源
    最近更新 更多