传递在 boost 中不起作用的命名参数

Passing a named parameter not working in 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

(注意:我知道上面的调用没有意义,但它表明出了什么问题。)

我知道我可以使用 get(edge_capacity, g) 来获取容量图并使用它,而不是传递我自己的。总的来说,我只是想知道是否有关于何时可以专门传入命名参数以及何时不能传入的规则,即使 boost 规范专门提到了命名参数。

看起来很像您在冲突角色中使用名称,即 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)));

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


UPDATE 是的,情况似乎是这样。例如参考edmonds_karp_max_flow的文档,其中对应的命名参数记录为:

IN: capacity_map(CapacityEdgeMap cap)

The edge capacity property map. The type must be a model of a constant Lvalue Property Map. The key type of the map must be the graph's edge descriptor type.

Default: get(edge_capacity, g)