On Sunday, 3 October 2021 at 22:22:48 UTC, rjkilpatrick wrote:
```d
import std.stdio : writeln;
import std.variant;
import std.conv;

// Arbitrary super class
class SuperClass {
    this() {
    }
}

// Derived class with members
class DerivedClass : SuperClass {
public:
    this(float a) {
        this.a = a;
    }
    float a;
}

class OtherDerivedClass : SuperClass {}

void main() {
// When we use `SuperClass[] list;` here, we find 'a' is hidden by the base class
    Variant[] list;

    // Attempting to append derived class instances to list
    list ~= new DerivedClass(1.0f);
    list ~= new OtherDerivedClass;

    list[0].a;
    list[0].to!(get!(list[0].type)).a.writeln;
}
```

Looks like you want full duck typing. Dynamic objects are just hashtables of properties, so an array of them is something like this:
Variant[string][] list;
Variant[string] obj;
obj["a"]=Variant(1.0f);
list[0]["a"].get!float.writeln;

Reply via email to