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-hahbegin()
可能会返回一个临时值,但*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());