I'm trying to create methods across class hierarchies that can be chained nicely but i'm running into the problem that 'this' declared in a parent class only refers to that type. Is there a way i can get the following code to perform in the way i expect?

import std.stdio;

class Foo
{
        public auto foo()
        {
                return this;
        }
}

class Bar : Foo
{
        public auto bar()
        {
                return this;
        }
}

void main(string[] args)
{
        Bar bar = new Bar().bar().foo();
}

test2.d(21): Error: cannot implicitly convert expression ((new Bar).bar().foo()) of type test2.Foo to test2.Bar
Failed: 'dmd' '-v' '-o-' 'test2.d' '-I.'

How can i make the above marked 'this' refer to Bar when being called in a chain? When i call the methods like this each method call seems to implicitly convert 'this' into that method's containing class' instance, breaking the code and sometimes hiding child methods.

Reply via email to