Why doesn't alias this work with arrays?
Jonathan M Davis
jmdavisProg at gmx.com
Mon Jun 18 10:14:30 PDT 2012
On Monday, June 18, 2012 19:05:35 Andrej Mitrovic wrote:
> On 6/18/12, Jonathan M Davis <jmdavisProg at gmx.com> wrote:
> > At that point, you'd need to be converting from string[] to Wrap[],
> > which would mean creating a new array
>
> It doesn't have to allocate anything because there's the 'alias this'
> and a single data member. All the compiler has to do is cast the array
> type to Wrap[]. Casting is safe in this case and should be allowed to
> be implicit:
>
> void main()
> {
> string[] x = ["foo", "bar"];
> Wrap[] y = cast(Wrap[])x;
> assert(y[0] == "foo"); // safe
> }
>
> Of course this only works if there are no other data fields in Wrap
> except the string, and that's exactly what I have in this case.
Yes, but you never defined such a conversion. With alias this, you told the
compiler that when you need to convert a Wrap to a string or a string to Wrap,
it should use the wrap member variable as if it were the object. You can't
even construct a Wrap from a string. You didn't tell the compiler how. Note
that
Wrap w = "hello";
doesn't compile. The fact that Wrap doesn't happen to have any other member
variable is irrelevant. The only conversion that the compiler knows about is
the alias this, and that doesn't take into account the rest of the struct at
all.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list