On Tuesday, 27 January 2015 at 04:38:59 UTC, David Monagle wrote:
Hi guys,

I'm a former C++ developer and really enjoying working with D now. I have a question that I hope some of you may be able to answer.

class Parent {
  @property string typeName() {
    return typeof(this).stringof;
  }
}

class Child : Parent {
}

void main() {
  auto p = new Parent;
  auto c = new Child;
  assert(p.typeName == "Parent");
  assert(p.typeName == "Child");
}


I'm looking for an explanation as to why this doesn't work, then a suggestion for how I may achieve child classes being able to generate a string description of their own type, without redefining the typeName property on each child. (I'm currently solving this with a mixin, but I was hoping for a better solution.

I'm assuming it doesn't work because either typeof(this) or .stringof is evaluated at compile time?

This is almost the same code as written initially,
let somone explain why the hell this is working:

---
module test;
import std.conv;

class Parent {
  @property final string typeName() {
    return to!string(this);
  }
}

class Child : Parent {
}

void main() {
  auto p = new Parent;
  auto c = new Child;
  assert(p.typeName == __MODULE__ ~ ".Parent");
  assert(c.typeName == __MODULE__ ~ ".Child");
}
---

Reply via email to