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

问题描述:

这个问题是关于Boost Graph LibraryBGL:没有默认构造函数的捆绑对象?

假设我的图表类型是这样定义的:

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

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

documentation

类型的所有属性值必须是可复制构造,可赋值和可缺省构造。从adjacency_list类获得的属性映射是左值属性映射概念的模型。如果adjacency_list是const,那么属性映射是常量,否则属性映射是可变的。

你应该做一个属性类型,它是能够持有或引用State

对于你可能有,是以财产超载成功的第一步:

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

见其他docs

+0

你还需要'G [VD = s'?另外,我的'Graph'类型适合用于这种过载吗? – AlwaysLearning

+0

您可以在链接的文档中查找。但是,是的,这应该适用。不过,对于房产类型的要求并没有改变,所以应该考虑系统性的修改。 – sehe