BGL:没有默认构造函数的捆绑对象?
问题描述:
这个问题是关于Boost Graph Library
。BGL:没有默认构造函数的捆绑对象?
假设我的图表类型是这样定义的:
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
对象的默认构造。这个成本是纯粹的运行时间开销。
那么,有没有办法避免捆绑对象的默认构造函数的需要?
答
类型的所有属性值必须是可复制构造,可赋值和可缺省构造。从adjacency_list类获得的属性映射是左值属性映射概念的模型。如果adjacency_list是const,那么属性映射是常量,否则属性映射是可变的。
你应该做一个属性类型,它是能够持有或引用您State
。
对于你可能有,是以财产超载成功的第一步:
auto vd = add_vertex(s, g); // g is a MutablePropertyGraph object
g[vd] = s;
见其他docs
你还需要'G [VD = s'?另外,我的'Graph'类型适合用于这种过载吗? – AlwaysLearning
您可以在链接的文档中查找。但是,是的,这应该适用。不过,对于房产类型的要求并没有改变,所以应该考虑系统性的修改。 – sehe