使用范围为基础与CGAL类型的循环

时间:2019-01-28 13:56:39

标签: c++ c++11 for-loop cgal

考虑一个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);
}

如果我尝试将其迁移为使用C ++ 11样式的基于范围的for循环,如下所示:

for(auto face : gMap)
{
    do_stuff(face)
}

我收到以下错误(强调我的意思):

  

错误:(1385,13)类型'CGAL :: Arrangement_2>>,true>,std :: __ 1 :: vector>> true,>,std :: __ 1 :: allocator>>,真>>>>,CGAL :: Arr_consolidated_curve_data_traits_2>>,真>>,INT>>,CGAL :: Arr_extended_dcel>>,真>,的std :: __ 1 ::矢量>>,真>>,的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 ,true>>,CGAL :: __ Unique_list>>,CGAL :: Gps_face_base>>';的没有可行的 '开始' 功能可用

如果我将for循环更改为使用auto &faceconst 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 :(得分:2)

要遍历面孔的范围基本版本为face_handles()。顶点(vertex_handles())和半边(halfedge_handles())具有类似的功能。