【问题标题】:GLib: Replacement for deprecated g_tree_traverse() function?GLib:替换已弃用的 g_tree_traverse() 函数?
【发布时间】:2020-06-10 13:47:54
【问题描述】:

最近我们计划将 glib 库升级到最新版本:2.64

我们已经构建了库并尝试在我们的构建基础架构中使用它。在运行构建时,我们遇到了很多带有符号“g_tree_travers”的警告,如下所示:-

warning: 'g_tree_traverse' is deprecated [-Wdeprecated-declarations]

不确定我们应该使用什么来代替g_tree_traverse,我们该如何解决这个问题?

【问题讨论】:

标签: compilation glib


【解决方案1】:

the documentation 复制(根据 Jussi 的建议):

g_tree_traverse 自 2.2 版以来已被弃用,不应在新编写的代码中使用。

平衡树的顺序有些随意。如果您只想按排序顺序访问所有节点,请改用g_tree_foreach()。如果您确实需要以不同的顺序访问节点,请考虑使用 n 叉树。

【讨论】:

  • 感谢 Philip,我们可以使用 'g_tree_foreach' ,但是这个函数的功能与 'g_tree_traverse' 不同,我注意到在 g_tree_traverse 函数中我们传递了 'traverse_type' 参数,其中在 'g_tree_foreach'默认情况下,我们不发送“traverse_type”,它按排序顺序遍历所有节点。在我们使用 'g_tree_traverse' 的情况下,我们使用 traverse_type 作为 G_IN_ORDER、G_PRE_ORDER ...等的组合,我们如何使用 g_tree_foreach 实现相同的效果。你能在这里分享一些示例代码吗?
  • GTree 被记录为实现了一个 sorted 平衡二叉树,并针对排序访问进行了优化。进行前序、中序和后序遍历意味着您可能并不关心实际排序的节点。如文档所述,请考虑改用 n 叉树,例如 GNode
猜你喜欢
  • 1970-01-01
  • 2019-12-20
  • 2013-05-08
  • 1970-01-01
  • 2013-01-13
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多