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

时间:2015-11-19 17:24:59

标签: c++ boost

这个问题与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对象的默认构造。这个成本是一个纯粹的运行时开销。

那么,有没有办法避免需要捆绑对象的默认构造函数?

1 个答案:

答案 0 :(得分:1)

documentation

  

所有属性值的类型必须是Copy Constructible,Assignable和Default Constructible。从adjacency_list类获得的属性映射是Lvalue属性映射概念的模型。如果adjacency_list是const,那么属性映射是常量,否则属性映射是可变的。

您应该创建一个能够持有引用您的State的属性类型。

对于第一步,您可能会成功获取属性的重载:

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

请参阅其他docs