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