Использование диапазона для цикла с типами CGAL - PullRequest
0 голосов
/ 28 января 2019

Рассмотрим 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); 
    }
}

1 Ответ

0 голосов
/ 28 января 2019

Базовая версия диапазона для итерации по граням: face_handles().У вас есть похожие функции для вершин (vertex_handles()) и полужив ((1005 *).

...