【问题标题】:gtk _get_type() function implementationgtk _get_type() 函数实现
【发布时间】:2013-12-31 18:50:33
【问题描述】:

我刚开始学习 GTK。我正在浏览 gtk+3.0.0 的源代码,我发现了一些 gtk 对象类型的 _get_type() 方法的实现,但有些没有这个方法的实现,例如GtkRange。这有什么原因吗?据我从 GObject 参考手册中了解到,_get_type() 方法在类型系统中注册对象类型。

【问题讨论】:

  • 每个小部件都应该有一个_get_type() 函数,由G_DEFINE_TYPE 和派生的宏显式编码或隐式定义:developer.gnome.org/gobject/stable/…
  • @ntd 我不知道不同类型的宏.. 非常感谢

标签: gtk glib gtk3 gobject


【解决方案1】:

所有注册为 GType 的类型都需要 get_type() 函数。 GObject(库)提供了方便的宏来生成正确的get_type() 函数实现,同时考虑到线程安全初始化或动态类型注册等因素。

用于GObject(类型)子类的宏是G_DEFINE_TYPE(),但在GTK+中你也会发现G_DEFINE_TYPE_WITH_CODE(),一般在类型也实现接口时使用; G_DEFINE_ABSTRACT_TYPE()G_DEFINE_ABSTRACT_TYPE_WITH_CODE(),用于抽象类型;最近还有G_DEFINE_TYPE_WITH_PRIVATE()G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(),它们使用私有数据定义GObject 子类,避免在类初始化函数中调用g_type_class_add_private()

盒装类型(Plain Old Structures 周围的 GType 包装器)也有 G_DEFINE_BOXED_TYPE(),接口类型有 G_DEFINE_INTERFACE()

更多信息请参见 GObject 的 API 参考:

https://developer.gnome.org/gobject/stable/gobject-Type-Information.html#G-DEFINE-TYPE:CAPS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多