Я читаю чьи-то коды. Это функция из библиотеки ускорителей. Это оригинальное определение функции.Почему аргументы функций BGL разделены точками, а не запятыми?
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)
Это часть кода, которую я выбрал из чьего-то. Он работает, но я просто не понимаю, почему он использовал точку между 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]));
Huh ?? Точечные и запятые операторы являются ортогональными функциями? О чем вы действительно спрашиваете? –
Я спутал точку в predecessor_map (& предшественники [0]) .weight_map (get (& Edge :: cost, graph)) .distance_map (& distance [0]) Я думаю, что это должна быть запятая, чтобы отделить разные параметры. с помощью '.' означает, что это класс, а затем член, а затем член под этим членом. – daydayup
Вопрос будет лучше сформулирован как «Я не знаю, что здесь происходит. Похоже, что аргументы передаются отдельно с помощью' .' вместо a ',' ". Открытые вопросы ** гораздо менее запутывают **. Ваше недоразумение не позволяет людям увидеть ответ. – sehe