是否可以使用boost :: graph库来拥有多个节点类型和多种边缘类型(节点到边缘类型映射)?
(此问题与以下代码审核有关:code)
答案 0 :(得分:1)
在此处回答您的代码审核问题:
您的图表不是完全编译时的。
无论基础结构如何"图表",请考虑像vertex v = add_vertex(graph)
这样的函数。你可以用代码重载
traits<DataType>::vertex v = add_vertex(graph, data)
其中add_vertex是模板。
对于相应的函数add_edge(s,t, graph, data);
,您将需要更复杂的重载。
编译器没有办法想象会添加哪些顶点。这意味着某种类型的运行时调度是不可避免的。它可以是虚表多态,或Boost.Variant,或基于标志的天真变体,甚至是双重调度(也称为访客模式)。
答案 1 :(得分:1)
理论上你可以有一个图形,其中顶点类型是几种类型的Boost.Variant。同样,您也可以将边类型设为Boost.Variant。
但是,如果你想要最快的遍历,我建议保持顶点和边缘类型简单。相反,您可以将Boost.Variant用于边缘和顶点(捆绑)属性。