如何重写默认的struct构造函数

时间:2019-12-10 09:25:21

标签: d

我有一个结构,需要跟踪所创建实例的数量并将其用作唯一ID。因此,在默认构造函数中,我需要更新一个静态变量,例如:

struct Wire {
    int x, y, id;
    static int instanceCount;

    this() {
        this.id = instanceCount++;
    }
}

我不想禁用默认构造函数。目前,我正在使用一个类来解决该问题。

2 个答案:

答案 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);
}