Array of interface only with cast()?

2014-04-22 Thread Andre via Digitalmars-d-learn

Hi,

I just stumbled about this issue with array of interface. I want
to pass several objects (C and D) which shares the same interface A.
It seems somehow cumbersome that it only works if there is a cast on
the first element of the array.

interface A{}

class B: A{}

class C: B{};
class D: B{};

void main()
{
//A[] arr = [new C(), new D()]; // Does not work
A[] arr = [cast(A) new C(), new D()]; // Does work
}

Is the cast really needed?

Kind regards
André


Re: Array of interface only with cast()?

2014-04-22 Thread Andrej Mitrovic via Digitalmars-d-learn

On Tuesday, 22 April 2014 at 15:19:55 UTC, Andre wrote:

Is the cast really needed?


It's a known issue and a filed bug report. I don't have the Issue 
number at hand though, someone else will likely provide it.


Re: Array of interface only with cast()?

2014-04-22 Thread Andre via Digitalmars-d-learn

Am 22.04.2014 17:23, schrieb Andrej Mitrovic:

On Tuesday, 22 April 2014 at 15:19:55 UTC, Andre wrote:

Is the cast really needed?


It's a known issue and a filed bug report. I don't have the Issue number
at hand though, someone else will likely provide it.


Nice to hear that it is not by design but will be fixed.
Thanks a lot.

Kind regards
André


Re: Array of interface only with cast()?

2014-04-22 Thread Steven Schveighoffer via Digitalmars-d-learn

On Tue, 22 Apr 2014 11:19:57 -0400, Andre an...@s-e-a-p.de wrote:


Hi,

I just stumbled about this issue with array of interface. I want
to pass several objects (C and D) which shares the same interface A.
It seems somehow cumbersome that it only works if there is a cast on
the first element of the array.

interface A{}

class B: A{}

class C: B{};
class D: B{};

void main()
{
//A[] arr = [new C(), new D()]; // Does not work
A[] arr = [cast(A) new C(), new D()]; // Does work
}

Is the cast really needed?


At this point, yes. This is because the expression [new C(), new D()] does  
not take into account what you are assigning to (IMO it should).


The compiler will use the most derived type possible that all the elements  
implicitly cast to. In this case, it will be a B[].


-Steve


Re: Array of interface only with cast()?

2014-04-22 Thread bearophile via Digitalmars-d-learn

Andre:


Nice to hear that it is not by design but will be fixed.


See:
https://issues.dlang.org/show_bug.cgi?id=3543

Bye,
bearophile