day*_*yup 0 c++ boost boost-graph
我在读某人的密码.这是来自boost图库的函数.这是原始的函数定义.
void dijkstra_shortest_paths
(const Graph& g,
typename graph_traits<Graph>::vertex_descriptor s,
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
VertexIndexMap index_map,
CompareFunction compare, CombineFunction combine, DistInf inf, DistZero zero,
DijkstraVisitor vis, ColorMap color = default)
Run Code Online (Sandbox Code Playgroud)
这是我从某人那里挑选出的一段代码.它有效,但我只是不明白他为什么在中间使用点predecessor_map weight_map而distance_map不是逗号?他传入函数的参数是多少?
dijkstra_shortest_paths(graph, source_vertex,
predecessor_map(&predecessors[0])
.weight_map(get(&Edge::cost, graph))
.distance_map(&distances[0]));
Run Code Online (Sandbox Code Playgroud)
该文件解释了这是怎么回事:
许多Boost.Graph算法都有很长的参数列表,其中大多数都有默认值.这会导致几个问题.
[...]
提供了更好的解决方案
bgl_named_params.此类允许用户提供任何顺序的参数,并根据参数名称匹配参数的参数.[...]
每个参数都传递给一个函数,该函数的名称指示参数所针对的参数.每个命名参数由句点分隔,而不是逗号.
[...]
通常,用户永远不需要
bgl_named_params直接处理该类,因为有类似于boost::weight_map创建实例的函数bgl_named_params.
另请参见什么是"命名参数成语"?.