我有一个结构,需要跟踪所创建实例的数量并将其用作唯一ID。因此,在默认构造函数中,我需要更新一个静态变量,例如:
struct Wire {
int x, y, id;
static int instanceCount;
this() {
this.id = instanceCount++;
}
}
我不想禁用默认构造函数。目前,我正在使用一个类来解决该问题。
答案 0 :(得分:1)
这些是您在D中的选项。使用一个类并能够定义无参数构造函数,或者使用一个结构而无法做到这一点。这样做的原因显然必须处理D的.init功能。另一个解决方法是使用一个单独的工厂函数来构造Wire,更新instanceCount并返回Wire。
无论如何,听起来在课堂上听起来更有意义。更期望类具有“实例”和类状态,例如instanceCount
。如果只希望结构以便可以在堆栈上分配它们,则实际上可以使用以下类来实现:scope s = new S()
答案 1 :(得分:0)
@verne已经指出您应该为此使用类。另一种方法是使用静态opCall,但这不是完美的解决方案:
import std.stdio;
struct Wire {
int x, y, id;
static int instanceCount;
static opCall() {
Wire w;
w.id = instanceCount++;
return w;
}
}
void main()
{
auto s0 = Wire();
auto s1 = Wire();
writeln(s0);
writeln(s1);
}