检索提升侵入列表钩的原始指针

时间:2013-01-08 12:18:12

标签: c++ boost

我有一个继承boost CNode的类list_base_hook,以便我可以在提升侵入列表中使用它。

class CNode
   //Base hook with default tag, raw pointers and safe_link mode
   :public list_base_hook<>
{
   // Suppose the linked pointers inherited from list_base_hook
   // are "m_prev", "m_next".
};

当节点从列表中弹出时,它将被推入另一个FIFO。该FIFO计划重用m_prevm_next将节点链接在一起,同时实现单读取器 - 单写程序线程安全语义。

在我的FIFO中:

class CFIFO
{
public:
  void push_back(CNode *node)
  {
     // Is there any way to update the "m_next"/"m_prev" fields?
     // SetNextLink is faked here..
     m_tail->SetNextLink(node);
     ..
  }
};

有没有办法获得m_prev的{​​{1}},m_next字段?

2 个答案:

答案 0 :(得分:1)

您可以使用iterator_to从const引用转到迭代器。然后,您可以递减或递增迭代器。实际上,您可以将s_iterator_to与双向链接的侵入列表一起使用。

更新:哦,你不想&#34;得到&#34;他们,你想改变它们。在这种情况下,您必须像实现其他侵入式容器一样实现自己的侵入式容器。就个人而言,我只是在内部使用侵入式列表。使双向链表像FIFO一样,基本上是微不足道的。

答案 1 :(得分:1)

关联字段prev_next_是从list_base_hook继承的,我可以直接访问它们,因为它们在基础上公开。

class MyNode: public list_base_hook<>
{
   //..
};

list<MyNode> myList;
for (list<MyNode>::iterator it = myList.begin(); it != myList.end(); ++it)
{
   // The type of the pointer is list<MyNode>::node_ptr
   cout << it->prev_ << it->next_ << endl;
}