Рассмотрим CGAL::Arrangement_2
.Прямо сейчас я должен повторить это следующим образом:
using MyArrangement = CGAL::Arrangement_2<MyTraits, MyDcel>;
for(MyArrangement::Face_handle face = map.faces_begin(); face != map.faces_end(); ++face)
{
do_stuff(face);
}
Если я попытаюсь перенести это на использование цикла for
на основе диапазона в стиле C ++ 11, например:
for(auto face : gMap)
{
do_stuff(face)
}
Я получаю следующую ошибку (выделено мое):
Ошибка: (1385, 13) выражение недопустимого диапазона типа 'CGAL :: Arrangement_2>>, true>, std ::__1 :: vector>>, true>>, std :: __ 1 :: allocator>>, true>>>>, CGAL :: Arr_consolidated_curve_data_traits_2>>, true>>, int>>, CGAL :: Arr_extended_dcel>>, true>, std :: __ 1 :: vector>>, true>>, std :: __ 1 :: allocator>>, true>>>>, CGAL :: Arr_consolidated_curve_data_traits_2>>, true>>, int>>, GIS_vertex_data, GIS_halfedge_data, GIS_face_data, CGAL :: Arr_vertex_base>>, true>>>, CGAL :: Gps_halfedge_base>>, true>>, CGAL :: _ Unique_list>>, CGAL :: Gps_face_base>> '; недоступна жизнеспособная функция 'begin'
Ошибка такая же, если я изменяю цикл for на использование auto &face
или const auto &face
.
у кого-нибудь есть обходной путь для этого, или какая-нибудь хорошая обертка, чтобы заставить это работать?Я пытаюсь избежать необходимости использовать это чудовище с лямбда-аргументом:
template<typename F>
void for_each_face(MyArrangement &map, F callback)
{
for(MyArrangement::Face_handle f = map.faces_begin(); f != map.faces_end(); ++f)
{
callback(f);
}
}