CGAL 句柄与迭代器比较
CGAL handle to iterator comparison
我在论坛上了解到,CGAL iterator/circulator 可以隐式类型转换为相应的句柄。我应该可以使用 iterators/circulators "as if they were handles"。如果我尝试比较它们,为什么会出现错误?这是一个例子:
typedef CGAL::Constrained_Delaunay_triangulation_2<K, Tds> CDT;
typedef CDT::Vertex_handle Vertex_handle;
typedef CDT::Vertex_iterator Vertex_iterator;
...
CDT cdt;
Vertex_handle va = cdt.insert(Point(0,0));
for(Vertex_iterator i=cdt.vertices_begin();...) {
va=i; /* Compiles Ok */
if(va==i) { ... } /* Pages of Error messages */
}
这个例子改编自CGAL Delaunay meshing demo
解决方法很简单...
for(Vertex_iterator i=cdt.vertices_begin();...)
{
va=i; /* Implicit dereferencing */
/* Implicit deref. doesn't work, so use explicit dereferencing */
if(va==Vertex_handle(i)) { ... }
}
我在论坛上了解到,CGAL iterator/circulator 可以隐式类型转换为相应的句柄。我应该可以使用 iterators/circulators "as if they were handles"。如果我尝试比较它们,为什么会出现错误?这是一个例子:
typedef CGAL::Constrained_Delaunay_triangulation_2<K, Tds> CDT;
typedef CDT::Vertex_handle Vertex_handle;
typedef CDT::Vertex_iterator Vertex_iterator;
...
CDT cdt;
Vertex_handle va = cdt.insert(Point(0,0));
for(Vertex_iterator i=cdt.vertices_begin();...) {
va=i; /* Compiles Ok */
if(va==i) { ... } /* Pages of Error messages */
}
这个例子改编自CGAL Delaunay meshing demo
解决方法很简单...
for(Vertex_iterator i=cdt.vertices_begin();...)
{
va=i; /* Implicit dereferencing */
/* Implicit deref. doesn't work, so use explicit dereferencing */
if(va==Vertex_handle(i)) { ... }
}