传递一个不在boost中工作的命名参数

时间:2015-01-08 13:05:14

标签: boost

The Boykov Kolmogorov Max Flow algorithm有几个命名参数。不知怎的,我在将这些参数传递给函数时遇到了麻烦。

当我做

之类的事情时
boykov_kolmogorov_max_flow(g, origin, sink, edge_capacity(get(edge_capacity, g)));

然后我得到了:

error: ‘edge_capacity’ cannot be used as a function

(Nb:我知道上面的调用毫无意义,但它显示出了什么问题。)

我知道我可以使用get(edge_capacity, g)获取容量图并使用它而不是传递我自己的容量图。我一般都对是否有关于何时可以专门传入命名参数的规则感兴趣,而且即使boost规范没有特别提到命名参数也没有。

1 个答案:

答案 0 :(得分:1)

看起来非常像是在使用冲突角色的名称,即edge_capacity

http://www.boost.org/doc/libs/1_57_0/boost/graph/named_function_params.hpp开始,您可能需要使用capacity_map

尝试

boykov_kolmogorov_max_flow(g, origin, sink, boost::capacity_map(get(edge_capacity, g)));

如果可行,这看起来像文档错误


更新是的,似乎是这种情况。例如,请参阅edmonds_karp_max_flow的文档,其中相应的命名参数记录为:

  

IN: capacity_map(CapacityEdgeMap cap)

     

边缘容量属性映射。该类型必须是常量左值属性映射的模型。地图的关键类型必须是图形的边缘描述符类型。

     

默认: get(edge_capacity, g)