Gobject 的函数 G_TYPE_INSTANCE_GET_PRIVATE 已弃用

问题描述 投票:0回答:2

我想构建 dbusmenu 库,但我不能,因为标题中的函数已被弃用。所有程序员都应该使用 G_ADD_PRIVATE 代替。当然我找到了解决方法,但我想修复代码(这是 Debian、MATE 等中使用的库)

我认为我无法替换宏,这太简单了,而且没有意义:).. 那么,有谁可以为我提供一个如何在 GObjects 中使用 G_ADD_PRIVATE 的示例吗?谢谢

这是已弃用代码的示例:

static void
dbusmenu_defaults_init (DbusmenuDefaults *self)
{
    self->priv = DBUSMENU_DEFAULTS_GET_PRIVATE(self);

    self->priv->types = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_hash_table_destroy);
}

哪里

#define DBUSMENU_DEFAULTS_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_TYPE_DEFAULTS, DbusmenuDefaultsPrivate))
gtk3 dbus gobject
2个回答
0
投票

G_ADD_PRIVATE
的文档中有一个示例。


0
投票

我发现文档没有帮助,(1) 包含的信息是错误的,(2) 它不起作用。

我发现这个例子是有人更新现有源代码libreoffice src代码更改

我正在编写的代码已经实现了 G_ADD_PRIVATE(),但它仍在使用 G_TYPE_INSTANCE_GET_PRIVATE() 函数。

来自:

G_DEFINE_TYPE_WITH_CODE (GLOActionGroup, g_lo_action_group, G_TYPE_OBJECT,
    G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP, g_lo_action_group_iface_init));

至:

G_DEFINE_TYPE_WITH_CODE (GLOActionGroup, g_lo_action_group, G_TYPE_OBJECT,
    G_ADD_PRIVATE(GLOActionGroup)
    G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP, g_lo_action_group_iface_init));

来自:

g_lo_action_group_init (GLOActionGroup *group)
{
    group->priv = G_TYPE_INSTANCE_GET_PRIVATE (group, G_TYPE_LO_ACTION_GROUP, GLOActionGroupPrivate);
}

至:

g_lo_action_group_init (GLOActionGroup *group)
{
    group->priv = g_lo_action_group_get_instance_private (group);
}
© www.soinside.com 2019 - 2024. All rights reserved.