C++ 如何转换slist';节点ptr';到我自己的节点类型

C++ 如何转换slist';节点ptr';到我自己的节点类型,c++,boost,intrusive-containers,C++,Boost,Intrusive Containers,我声明了以下节点,它继承自boost::intrusive::slist\u base\u hook: class InputBufferSglNode : public boost::intrusive::slist_base_hook<> 我是否应该将节点\u ptr强制转换为InputBufferSglNode*?应该是哪种类型的转换?get\u root\u node不是文档化API的一部分 你在找什么 InputBufferSglNode& node = *thi

我声明了以下
节点
,它继承自
boost::intrusive::slist\u base\u hook

class InputBufferSglNode : public boost::intrusive::slist_base_hook<>

我是否应该将
节点\u ptr
强制转换为
InputBufferSglNode*
?应该是哪种类型的转换?

get\u root\u node
不是文档化API的一部分

你在找什么

InputBufferSglNode& node = *this->begin();
如果您对反面感兴趣:


更新

我在文档中阅读了更多内容,有一种方法可以让您通过使用列表类型的派生值_traits来做您想要做的事情:

InputBufferSglNode* node = 
      InputBufferSglList::value_traits::to_value_ptr(list.get_root_node());
这将使用位于所有入侵容器下面的

对于所有常用的节点默认挂钩,它将导致一点偏移算法(例如,从成员地址到节点地址)。但在实践中,它可能涉及到上下分层类的强制转换(特别是当涉及虚拟基时)


对于任何
to_value_ptr
to_node_ptr
都是标识函数。

我已经找到了您问题的直接答案,请参见updateTank you@sehe下的,这正是我要找的,我知道迭代器,但由于我需要在某些条件下检查'root'和pop,使用迭代器会有点太多,还要注意,
begin()
返回临时值,因此不能像您在第一行代码中提到的那样将其分配给引用值。(因为这样别人才不会弄错)@SagiLow-Oh-hah
begin()
可能会返回一个临时值,但
*begin()
不是:)如果您愿意,可以将其设置为
InputBufferSglNode*node=&*this->begin()o.OIt实际上不是<代码>&*迭代器
是从迭代器转换为引用/指针的一种相当常见的模式。(例如,
调用\u some\u foo(&string1[0],string1.length())
InputBufferSglNode& node = *this->begin();
InputBufferSglNode* node = 
      InputBufferSglList::value_traits::to_value_ptr(list.get_root_node());