繁体   English   中英

如何将slist'node_ptr'转换为我自己的节点类型

[英]how to convert slist 'node_ptr' to my own node type

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

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*吗? 应该是哪个演员?

get_root_node不属于已记录的API。

你在找吗

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

如果您对反向感兴趣:


更新

我已经阅读了文档中的更多内容,并且可以通过将派生的value_traits用于列表类型来完成所需的工作:

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

这使用了ValueTraits接口 ,该接口是所有侵入式容器的基础。

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

对于任何琐碎的值_特征to_value_ptrto_node_ptr都是身份函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM