2012-07-04 30 views

回答

3

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

挂钩是向相关侵入性容器提供所需信息的方式。为此,定义要存储的objets的类可以从钩子继承,也可以作为成员拥有它。

只要在编译时需要完全知道侵入容器,就会使用模板对钩子进行参数化,这会导致语法,其中选项是模板类,关联的值是其参数。
例如,您可以通过在模板参数列表中指定的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; 
+0

另一种思考钩子的方法是作为链接节点,虽然它可能是一种过于简化,但它们包含双链表的“bext”和“prev”指针,但您的对象可能具有一个或多个这些节点,每个代表不同容器中的成员资格当它删除你的对象的时候,你可以从O(1) – nhed

+0

中的所有容器中删除它你能解释一下normal_link与safe_link和auto-unlink挂钩有何不同吗?是否normal_link钩子只是一个没有其他钩子提供的功能的钩子?或者它自己做一些事情? – elite21