2012-07-04 54 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