【问题标题】:Boost Intrusive Hooks增强侵入性挂钩
【发布时间】:2023-03-09 20:15:01
【问题描述】:

谁能解释一下boost intrusive hooks的概念?我不明白阅读文档 http://www.boost.org/doc/libs/1_47_0/doc/html/intrusive.html

【问题讨论】:

  • 请不要对新用户投反对票,评论问题或编辑以改进它!

标签: c++ boost hook


【解决方案1】:

Boost.intrusive 强制您提供有关要存储在侵入式容器中的对象的信息。

Hooks 是向关联的侵入式容器提供所需信息的方式。为此,定义您要存储的对象的类可以从挂钩继承或作为成员拥有它。

只要需要在编译时完全了解侵入式容器,就可以使用模板对钩子进行参数化,这导致语法中的选项是模板类,关联的值是它的参数。

例如,您可以通过在模板参数列表中指定link_mode参数并设置其值来定义链接模式:

boost::intrusive::list< MyClass, boost::intrusive::link_mode< boost::intrusive::safe_link > > l;

最后但同样重要的是,如果您的挂钩包含非默认值,您必须将其作为模板参数传递给您使用的侵入式容器类。

例如考虑侵入式列表,这意味着替换

boost::intrusive::list<MyClass> l;

boost::intrusive::list<MyClass, MyHook> l;

【讨论】:

  • 另一种考虑钩子的方式是作为链接节点,虽然它可能过于简化,但它们包含双链表的“bext”和“prev”指针,您的对象可能有这些节点中的一个或多个,每个代表不同容器中的成员资格。当需要删除对象时,您可以将其从 O(1) 中的所有容器中删除
  • 您能解释一下 normal_link 与 safe_link 和 auto-unlink 挂钩有何不同吗?是不是 normal_link 钩子只是一个没有其他钩子提供的功能的钩子?还是它自己做某事?
猜你喜欢
  • 2013-12-17
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多