On Wednesday, 12 July 2017 at 11:00:54 UTC, Jiyan wrote:
Hey there:)
i want to know whether the following is somehow possible:
structs dont have default constructors, i know so:
struct A
{
int field;
this(int i){field = getDataFromFile("file.txt");}
}
A instance = A(0);
Here comes my issue:
when A(0) is called I would want here optimal performance, so
there doesnt even need to be a value pushed on the stack (i=0),
what would be like having a constructor with zero arguments (i
is never used!).
Im pretty new to D, can somebody tell me how i would do this?
Is this(lazy int i){ ... a solution?
The traditional solution is static opCall:
struct A {
int field;
static A opCall() {
A result;
result.field = getDataFromFile("file.txt");
return result;
}
}
A instance = A();
I believe I've heard this is frowned upon these days, but I don't
know of a better solution.
For optimal speed you might also want to skip default
initialization of result, by writing A result = void;.
I would be surprised if the optimizer wasn't able to optimize
away the useless parameter though - have you looked at the
generated assembly?
--
Biotronic