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 classVariant[] 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;
