【问题标题】:Using g_autoptr() together with G_DEFINE_AUTOPTR_CLEANUP_FUNC() when using older and newer GLib versions在使用较旧和较新的 GLib 版本时将 g_autoptr() 与 G_DEFINE_AUTOPTR_CLEANUP_FUNC() 一起使用
【发布时间】:2020-05-18 14:32:30
【问题描述】:

在使用我不理解的不同 GLib 版本时,将 g_autoptr() 与 G_DEFINE_AUTOPTR_CLEANUP_FUNC() 一起使用有些东西(这也会影响其他 g_auto... 变体及其 G_DEFINE)。

documentation

"清理类型的方式一定已经用宏定义过了 G_DEFINE_AUTOPTR_CLEANUP_FUNC()"

当使用例如 GLib 2.62 和使用 G_DEFINE 宏时,这会导致类似的错误

/usr/include/glib-2.0/glib/gmacros.h:1032:49: error: redefinition of ‘glib_slistautoptr_cleanup_GtkTreePath’
 1032 | #define _GLIB_AUTOPTR_SLIST_FUNC_NAME(TypeName) glib_slistautoptr_cleanup_##TypeName

省略 G_DEFINE 宏将解决问题,程序运行正常。

但是,在 2.50 等较旧的 GLib 版本(例如,Debian 9 仍在使用)上,使用 G_DEFINE 宏不会导致错误消息。但我看不到 GLib 文档反映的任何更改。我无法确定何时引入了上述行为变化。当我想支持从 2.50 开始的所有 GLib 版本时,我应该如何处理这个问题?

【问题讨论】:

    标签: glib


    【解决方案1】:

    问题可能出在 Gtk 中,而不是 GLib 中。 Gtk+ 3.22(Debian 9 中的那个)中的大多数东西已经支持 g_autoptr():所以您不必自己在 Gtk 类型上调用 G_DEFINE_AUTOPTR_CLEANUP_FUNC()。然而,GtkTreePath 仍然缺少一个调用:这是在 3.24 中添加的,请参阅https://gitlab.gnome.org/GNOME/gtk/-/commit/86dd1e37a70e9bae057a9a11332f7254cda242e8

    如果您想在 Gtk

    【讨论】:

    • 谢谢,是的,我今天发现只需为 GtkTreePath 添加定义就可以消除这些错误和警告,我想知道为什么。
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 2015-10-21
    • 2019-02-18
    • 2015-08-02
    • 2019-03-20
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    相关资源
    最近更新 更多