boost intrusive 直接从节点获取下一个

boost intrusive get next directly from node

是否可以直接从 node/element 获取下一个 node/element?像这样:

struct Data{
   boost::intrusive::list_member_hook<> node;

   Data* get_next(){
       node.get_next() ???
   }
}

许多 boost 侵入式容器都有一个静态成员函数 s_iterator_to 可以直接从值中获取迭代器。

因此你可以获得一个迭代器然后使用迭代器接口:

struct Data{
   boost::intrusive::list_member_hook<> node;

   inline Data* get_next();
}

namespace bis = boost::intrusive;

using List = bis::list<Data,
        bis::member_hook<Data, bis::list_member_hook<>, &Data::node>
      >;

Data* Data::get_next() {
    return &*++List::s_iterator_to(*this);
}

Live Demo