为什么BGL函数的参数用点而不是逗号分隔?

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_mapdistance_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)

Chr*_*ckl 5

文件解释了这是怎么回事:

许多Boost.Graph算法都有很长的参数列表,其中大多数都有默认值.这会导致几个问题.

[...]

提供了更好的解决方案bgl_named_params.此类允许用户提供任何顺序的参数,并根据参数名称匹配参数的参数.

[...]

每个参数都传递给一个函数,该函数的名称指示参数所针对的参数.每个命名参数由句点分隔,而不是逗号.

[...]

通常,用户永远不需要bgl_named_params直接处理该类,因为有类似于boost::weight_map创建实例的函数bgl_named_params.

另请参见什么是"命名参数成语"?.