C++ 对CGAL类型使用基于范围的for循环

C++ 对CGAL类型使用基于范围的for循环,c++,c++11,for-loop,cgal,C++,C++11,For Loop,Cgal,考虑一个CGAL::排列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(auto face : gMap) { do_stuff(face

考虑一个
CGAL::排列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(auto face : gMap)
{
    do_stuff(face)
}
我得到以下错误(强调我的错误):

错误:(1385,13)类型为'CGAL::Arrangement_2>>,true>,std::\uu 1::vector>>,true>>,std:\uu 1::allocator>>,true>>,CGAL::Arr\u consolidated__曲线_数据_traits_2>>,true>>,int>>,CGAL::Arr\u extended__dcel>>,true>,std:\uu 1::vector>>,true>,std:\uu 1::allocator>>,true>>,std:\uu 1::allocator>>,true>,CGAL::Arr_合并曲线数据特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征特征没有可用的“开始”功能

如果我将for循环更改为使用
auto&face
const auto&face
,则错误相同

有没有人对此有解决办法,或者有什么好的包装来让它工作?我试图避免在lambda参数中使用这个怪物:

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); 
    }
}
模板
每个面为空(MyArrangement&map,F回调)
{
对于(MyArrangement::Face_handle f=map.faces_begin();f!=map.faces_end();++f)
{
撤回(f);
}
}

在面上迭代的范围基本版本为。对于顶点(
vertex\u handles()
)和半边(
halfedge\u handles()
)有类似的函数。

可以实现一个。但我不知道该类是否公开了其他有用的迭代器。只是不要将它们放在
std
中。让他们像ADL应该做的那样自由发挥。谢谢你的纠正。直到ADL!啊哈!非常感谢你的指点。为了子孙后代,这似乎是在2017年9月发布的CGAL 4.11中引入的。