Would love to override default ctor of struct
aliak
something at something.com
Tue Jan 22 01:18:24 UTC 2019
On Monday, 21 January 2019 at 20:50:45 UTC, Meta wrote:
> On Monday, 21 January 2019 at 19:08:49 UTC, Alex wrote:
>> Could you give an example, where a zero argument construction
>> has to be done, which cannot be accomplished by setting the
>> appropriate field with a default value?
>
> For the following reason, although the default argument
> constructor hack no longer works:
>
> import std.stdio;
>
> struct Test(bool useFieldDefaultVal)
> {
> static if (useFieldDefaultVal)
> {
> int[] arr = [1, 2, 3];
> }
> else
> {
> int[] arr;
>
> this(int dummy = 0)
> {
> arr = [1, 2, 3];
> }
> }
>
> void doTest()
> {
> writeln("Address of arr: ", arr.ptr);
> }
> }
>
> void main()
> {
> Test!true t1;
> Test!true t2;
>
> // Deprecation: constructor `onlineapp.Test!false.Test.this`
> // all parameters have default arguments, but structs cannot
> // have default constructors.
> auto t3 = Test!false();
>
> t1.doTest(); // Prints "Address of arr: 5622DAA0F010"
> t2.doTest(); // Prints "Address of arr: 5622DAA0F010"
> t3.doTest(); // Prints "Address of arr: null"
> }
Ok, so this confused me a bit, I seem to remember that when you
static inisialize a class in the declaration scope of a struct,
the same thing would happen as with arrays, i.e. they'd have the
same address. But this turned out different:
import std.stdio;
class C {}
struct Test(bool useFieldDefaultVal)
{
static if (useFieldDefaultVal)
{
C c = new C;
}
else
{
C c;
this(int dummy = 0)
{
c = new C;
}
}
void doTest()
{
writeln("Address of c: ", &c);
}
}
void main()
{
Test!true t1;
Test!true t2;
// Deprecation: constructor `onlineapp.Test!false.Test.this`
// all parameters have default arguments, but structs cannot
// have default constructors.
auto t3 = Test!false();
t1.doTest(); // Prints "Address of arr: 7FFE1322A7E8"
t2.doTest(); // Prints "Address of arr: 7FFE1322A7F0"
t3.doTest(); // Prints "Address of arr: 7FFE1322A7F8"
}
t1 and t2 have different addresses and t3 has t1's address?? Huh?
Vat Khappened Khere?
More information about the Digitalmars-d
mailing list