Python's list equivalent with std.variant?

rjkilpatrick nothanks at
Sun Oct 3 22:22:48 UTC 2021


I am trying to emulate Python's list in D, to store some derived 

My initial thought was to use a dynamic array of `std.variant`s.
I've tried implementing something but seeing as we can only 
instantiate templates at compile-time, and I may only know the 
type at run-time, I'm not sure how to go about this:

import std.stdio : writeln;
import std.variant;
import std.conv;

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

// Derived class with members
class DerivedClass : SuperClass {
     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;


And we get the error(s):

onlineapp.d(27): Error: cannot append type 
`onlineapp.DerivedClass` to type `VariantN!32LU[]`
onlineapp.d(28): Error: cannot append type 
`onlineapp.OtherDerivedClass` to type `VariantN!32LU[]`
onlineapp.d(30): Error: no property `a` for type 
onlineapp.d(31): Error: template `object.get` does not match any 
template declaration

I would be grateful for any help

More information about the Digitalmars-d-learn mailing list