我有一个继承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_prev
,m_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
字段?
答案 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;
}