我有一个带有列表的结构:
struct my_struct {
my_list : list of uint;
// other fields
};
我想构建类似于cpp class constructor
的东西:
当我使用my_struct
运算符分配new
时,my_list
将启动一个零元素 - my_list == { 0 }
;
有没有办法在e?
中构建结构构造函数感谢您的帮助
答案 0 :(得分:1)
是的,any_struct有init()方法。使用new()创建结构时调用它,并且在生成结构时(在生成,约束求解,开始之前)调用它。
如果您希望此列表始终具有相同的init值,无论是使用new还是使用gen创建,请将此列表字段标记为do-not-generate。
struct my_struct {
!l : list of_ int;
init() is also {
l = {0};
};
};
答案 1 :(得分:1)
在 e 中,没有像C ++那样的参数化构造函数的“通用”概念,但正如在另一个答案中所提到的,有一个预定义的init()
方法(没有参数)每当创建给定类型的新对象时自动调用。
重要的是要注意init()
被称为每当创建该类型的对象时,无论其创建发生的方式如何:它可能是通过new
进行的显式创建,作为预运行生成的一部分的隐式创建,等等。
另一个要点:如果您只需要为字段分配特定的常量值,您也可以直接在字段声明中指定此值,而不必通过init()
指定,例如:
struct my_struct {
my_list : list of uint = {0}; // field declared with an initializer
};