我正在尝试将class MyBloc extends Bloc<MyEvent, MyState> {
@override
Stream<MyState> mapEventToState(MyEvent event) async* {
if (event is ChangeSomeValues) {
print("here's the data : ${event.data}");
}
}
}
应用于一组编号的顶点(即,顶点类为Delaunay_mesher_2::refine_mesh
)。我希望在过程中创建的任何顶点都应具有Triangulation_vertex_base_with_id_2
。但是事实并非如此。相反,这些ID具有各种正/负值。
我尝试使用id()==0
,但结果相同。
我的代码或多或少是这样的:
Triangulation_vertex_base_with_info_2
答案 0 :(得分:2)
CGAL::Triangulation_vertex_base_with_id_2<K>
的默认构造方法不会初始化id
成员:
template < typename GT,
typename Vb = Triangulation_vertex_base_2<GT> >
class Triangulation_vertex_base_with_id_2
: public Vb
{
int _id;
public:
// [...]
Triangulation_vertex_base_with_id_2()
: Vb() {}
这意味着_id
是default-initialized:
说明
在以下三种情况下执行默认初始化:[...]
- 当构造函数初始化列表中未提及基类或非静态数据成员时,将调用该构造函数。
然后阅读下一段:
默认初始化的效果是:
- 如果T是非POD(直到C ++ 11)类类型,则考虑构造函数,并针对空参数列表对其进行重载解析。调用选定的构造函数(它是默认的构造函数之一)为新对象提供初始值;
- 如果T是数组类型,则数组的每个元素均为 默认初始化;
- 否则,什么也不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定的值。
如果子对象_id
的类型为int
,则它不是类或数组。这就是为什么它没有初始化。该值将是内存中存在的任何垃圾。
答案 1 :(得分:0)
没有任何算法设置ID。它仅使您可以根据需要进行设置。
答案 2 :(得分:0)
我认为这是CGAL中的某种错误(可能是不确定的行为,因为每次的结果都不同)。很难确定它是从哪里来的,但是GCC中的UB清理程序说,至少在某些地方取消了空指针的引用。
作为一种解决方法,可以通过Vertex_handle
使用int
到CGAL::Unique_hash_map
的映射。