On Thursday, 29 October 2015 at 01:14:35 UTC, Tofu Ninja wrote:
On Thursday, 29 October 2015 at 00:11:06 UTC, Tofu Ninja wrote:
[...]

Actually never mind, what I just said was basically auto override for this() so its not really any different. And it is kinda limited with some problems.

My argument though, is that a virtual function isn't needed. I'm not sure if this is sufficient for your use cases, but if I could do the this, I would have everything I need:

struct MyInfo { string name; }
static MyInfo[string] stuff;

class Base {
    static this(this This)() {
        stuff[fullyQualifiedName!This] = MyInfo(This.stringof);
    }
}

class Derived : Base {
    // static this called for Derived as well
 }

void main(string[] args)
{
    writeln(stuff["main.Base"].name);
    writeln(stuff["main.Derived"].name);
}

I think this would be a lot easier to understand than the virtual function approach. There would be no need to explain the complicated semantics of what happens when the definition is missing(can't inherit from the class) or how manually overriding these auto override functions stops the overriding, etc... template static this would simply be a static constructor that gets called for all subclasses, and nothing more.

When I thought about the virtual function approach, my intention was to have the virtual function return information about the subclass for the purpose of serialization or inspection. To be honest, I can't think of any other functionality I would want to specialize in this way.

    Bit

Reply via email to