после более тщательного расследования, я пришел к выводу, что на самом деле повезло, что выставлена версия с двумя параметрами boost :: read_graphml. Три параметра один выглядит так:
template<typename MutableGraph>
void
read_graphml(std::istream& in, MutableGraph& g, dynamic_properties& dp)
{
mutate_graph_impl<MutableGraph> mg(g,dp);
read_graphml(in, mg);
}
Существует особенно хороший редактор GraphML, а именно yEd, который выводит некачественный файл GraphML, например, с такими тегами, как
<key for="node" id="d6" yfiles.type="nodegraphics"/>
в нем. Вышеуказанный ключ должен содержать attr.type = "string" , но это не так. Вместо этого он имеет тип yfiles.type, который, по-видимому, является расширением, используемым yEd (к сожалению). По умолчанию mutate_graph_impl не может справиться с этим. mutate_graph_impl должен быть унаследован вами, и вам нужно будет напрямую вызвать 2 версию read_graphml с вашей собственной реализацией mutate_graph_impl, переданной ей.
В вашей собственной реализации вам нужно будет переопределить mutate_graph_impl
virtual void
set_vertex_property(const std::string& name, any vertex, const std::string& value, const std::string& value_type)
для обработки ключа с неопределенным типом attr.type.