BGL:没有默认构造函数的绑定对象

BGL: bundled object without a default constructor?

本文关键字:绑定 对象 构造函数 默认 BGL      更新时间:2023-10-16

这个问题是关于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;

这种方式有两个问题:

  • 它要求CCD_ 4具有默认构造函数。在这个特殊类State的情况下,默认构造函数根本没有意义。

  • 通过这种方式,当添加顶点时,我为State对象的默认构造付费。此成本是纯粹的运行时开销。

那么,有没有一种方法可以避免对绑定对象使用默认构造函数?

文档:

所有属性值的类型都必须是Copy Constructable、Assignable和Default Constructable。从邻接列表类获得的属性映射是Lvalue属性映射概念的模型。如果邻接列表是常量,则属性映射是常量,否则属性映射是可变的。

您应该使属性类型能够容纳引用您的State

对于第一步,您可能会成功地使用占用属性的过载:

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

请参阅其他文档