Initialize array of objects not work
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Aug 3 11:34:02 PDT 2016
On 08/03/2016 10:58 AM, Andre Pany wrote:
> I try to initialize an array of objects. The methods (linear/equals/....)
> returns object of different classes, but all implement a common
> interface "Element".
>
> Element[] elements =
> quadraticCoefficient(1)~linearCoefficient(2)~equals()~constant(1);
Note that those array concatenation operators are being applied to
individual object. Unless you define that operator for your types, it
won't work.
> I tried different casts and different ways but it seems, currently D
> does not support this syntax?
Not that syntax but D is supposed to figure out the closest common
ancestor. Unfortunately, the following code requires that cast:
interface Element {
}
class Foo : Element {
}
class Bar : Element {
}
Foo quadraticCoefficient(int) {
return new Foo();
}
Bar linearCoefficient(int) {
return new Bar();
}
Foo equals() {
return new Foo();
}
Bar constant(int) {
return new Bar();
}
void main() {
Element[] elements = cast(Element[])[ quadraticCoefficient(1),
linearCoefficient(2), equals(), constant(1) ];
elements ~= quadraticCoefficient(1);
elements = elements ~ linearCoefficient(2);
// etc.
}
Ali
More information about the Digitalmars-d-learn
mailing list