On Friday, 29 December 2017 at 12:03:59 UTC, Mike Franklin wrote:
In C#, structs can inherit from and implement interfaces.
Is that simply because it hasn't been implemented or suggested yet for D, or was there a deliberate design decision?

Thanks for your insight,

Mike

I think it's deliberate, structs are just plain dumb value types.

If I remember correctly I think Remedy's Binderoo C++ bindings implemented C++ inheritance on top of structs. You might want to look at that.

Or you could do C-style "inheritance" and slap some D magic on top of that.

Some pseudo code:
struct Base
{
  enum SubType subtype;

  int someBaseField;
}

struct Child1
{
  Base base; // Must be first
  int foo;
}

struct Child2
{
  Base base;
  float bar;
}


Base b;
Child1 c1;
Child2 c2;

base_doSomething(Base* b);
child1_doSomething(Child1* c1);
child2_doSomething(Child2* c2);


base_doSomething(cast(Base*)&c1);

switch(base.subtype)
{
  case Child1:
    child1_doSomething(cast(Child1*)&b); break;
  case Child2:
    child2_doSomething(cast(Child2*)&b); break;
}

// add some alias this and other d things to smooth things out.

Reply via email to