Unexpected aliasing
Bastiaan Veelo
Bastiaan at Veelo.net
Tue Nov 12 07:59:39 UTC 2019
On Monday, 11 November 2019 at 20:05:11 UTC, Antonio Corbi wrote:
> Defining and using a constructor for WrapIntegerArray seems to
> work:
>
> void main()
> {
> import std.stdio;
>
> WrapIntegerArray arr1 = WrapIntegerArray(5);
> arr1[0] = 42;
>
> WrapIntegerArray arr2 = WrapIntegerArray(5);
>
> writeln(arr2[0]); // 42, not 0.
> writeln("arr1.wrap.arr.ptr = ", arr1.wrap.arr.ptr);
> writeln("arr2.wrap.arr.ptr = ", arr2.wrap.arr.ptr); //
> identical
> assert(arr2[0] == 0); // fails
> }
>
> struct IntegerArray
> {
> int[] arr;
> alias arr this;
> this(int l)
> {
> arr = new int[l];
> }
> }
>
> struct WrapIntegerArray
> {
> this (int v) {
> wrap = IntegerArray(5);
> }
>
> IntegerArray wrap;
> alias wrap this;
> }
>
> Hope this helps.
> Antonio
Thanks, Antonio. My problem is that the length of the array
should be a built-in property of WrapIntegerArray (immutable in
this case); what I'd actually want is a constructor without
arguments. Jonathan's suggestion of using a factory function
comes closest to that.
Bastiaan.
More information about the Digitalmars-d-learn
mailing list