BGL 中的 slistS 发生了什么变化?

What's happened to slistS in BGL?

本文关键字:变化 什么 发生了 中的 slistS BGL      更新时间:2023-10-16

我正在使用 Boost 1.60 adjacency_list,并希望将slistS用于模板参数OutEdgeList

using Graph = boost::adjacency_list<
                 boost::slistS, boost::listS, boost::bidirectionalS
              >;

这不会编译。查看 adjacency_list.hpp 似乎在没有旧 STL std::slist的情况下显式删除了此类型:

#if !defined BOOST_NO_SLIST
#  ifdef BOOST_SLIST_HEADER
#    include BOOST_SLIST_HEADER
#  else
#    include <slist>
#  endif
#endif
#if !defined BOOST_NO_SLIST
   struct slistS {};
#endif

不能将std::forward_list用于boost::slistS吗?如果没有,是否有计划将其包含在BGL的未来版本中?

在我看来,

这特定于缺少<slist>的Clang/Libc++。它不是 c++ 标准的一部分。

使用 GCC

/libstdc++ 编译很好(使用 GCC 5.2 和 c++14 测试)。

所以我只使用boost::container::slist

住在科里鲁

#include <boost/container/slist.hpp>
#include <boost/graph/adjacency_list.hpp>
#ifdef BOOST_NO_SLIST
namespace boost {
    struct slistS;
    template <class ValueType> struct container_gen<slistS, ValueType> {
        typedef boost::container::slist<ValueType> type;
    };
    template <> struct parallel_edge_traits<slistS> { typedef allow_parallel_edge_tag type; };
}
#endif
int main() {
    using namespace boost;
    adjacency_list<vecS, slistS> works_for_me;
}