这个问题是关于Boost Graph Library的。

假设我的图形类型定义如下:

using Graph = boost::adjacency_list<vecS, setS, directedS, State>;

现在,如果我理解正确的话,可以将新的State对象s添加到图形中,如下所示:
auto vd = add_vertex(g); // g is a Graph object
g[vd] = s;

这种方式有两个问题:
  • 它要求State具有默认构造函数。对于这种特殊的类State,默认的构造函数根本没有意义。
  • 这样,在添加顶点时,我将为State对象的默认构造付费。此成本是纯运行时开销。

  • 因此,有没有一种方法可以避免对 bundle 对象使用默认构造函数?

    最佳答案

    documentation:



    您应该使属性类型能够保存或引用State

    对于第一步,您可能会成功实现带有属性的重载:

    auto vd = add_vertex(s, g); // g is a MutablePropertyGraph object
    g[vd] = s;
    

    查看其他docs

    10-02 00:59
    查看更多