这个问题与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
对象的默认构造。这个成本是一个纯粹的运行时开销。
那么,有没有办法避免需要捆绑对象的默认构造函数?
答案 0 :(得分:1)
所有属性值的类型必须是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