1

我已经声明了以下node继承自boost::intrusive::slist_base_hook<>

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

包含这些节点的列表的声明:

class InputBufferSglList : public boost::intrusive::slist<InputBufferSglNode, boost::intrusive::cache_last<true>>

我想从成员函数中获取根节点InputBufferSglList,所以我尝试这样做:
InputBufferSglNode* node = this->get_root_node();
但出现错误:

error: cannot initialize a variable of type 'InputBufferSglNode *' with an rvalue of type 'node_ptr' (aka 'boost::intrusive::slist_node<void *> *')

我应该投到node_ptrInputBufferSglNode*?应该是哪个铸件?

4

1 回答 1

1

get_root_node不是文档化 API 的一部分。

你在寻找

InputBufferSglNode& node = *this->begin();

如果你对相反的感兴趣:


更新

我在文档中阅读了更多内容,并且有一种方法可以通过将派生的 value_traits 用于列表类型来做你想做的事情:

InputBufferSglNode* node = 
      InputBufferSglList::value_traits::to_value_ptr(list.get_root_node());

这使用了作为所有侵入式容器基础的ValueTraits 接口。

对于所有常见的节点默认挂钩,它将导致一些偏移算术(例如,从成员地址到节点地址)。但在实践中,它可能涉及向上和向下转换类层次结构(尤其是在涉及虚拟基时)。

对于任何trivial_value_traitsto_value_ptr和都to_node_ptr将是恒等函数。

于 2014-11-30T19:01:03.063 回答