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;