[英]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_ptr
为InputBufferSglNode*
吗? 应该是哪个演员?
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_ptr
和to_node_ptr
都是身份函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.