On 08/23/2012 10:15 AM, nocide wrote:
struct has no default constructor and instances are initialized with the
init property.
Can I declare or override the init property for a custom defined struct?

You can define the initial values of each member:

struct S
{
    int i = 42;
    double d = 1.5;
}

void main()
{
    assert(S.init == S(42, 1.5));
}

That changes the .init value. You can also define a static opCall() to mimic the default constructor. Note that this method does not affect the .init value:

struct S
{
    int i;
    double d;

    static S opCall()
    {
        S s;
        s.i = 42;
        s.d = 1.5;
        return s;
    }
}

void main()
{
    assert(S().i == 42);
    assert(S().d == 1.5);

    assert(S.init.i == int.init);
    import std.math;
    assert(isnan(S.init.d));
}

Note that the static opCall() disables calling automatic destructor (i.e. the S(1, 2) does not work anymore). I am not sure whether that is one of the many struct-related issues at the moment.

Ali

Reply via email to