Dnia 24-07-2010 o 04:21:57 dsimcha <dsim...@yahoo.com> napisał(a):
I'm working on the next iteration of my Plot2Kill library, and I
**really**
have fallen in love with property chaining. It's the greatest thing
since
sliced arrays. However, I've run into an issue that I had previously
overlooked:
class Foo {
Type _val;
typeof(this) val(Type newVal) {
_val = newVal;
return this;
}
}
class Bar : Foo {
// More properties.
}
void main() {
auto bar = new Bar;
bar.val(someValue).barProperty(someOtherValue); // Won't work.
}
Given that D2 is mostly finalized, it may be a little late for this, but
would
it be feasible, at least far down the road, to add something like an
@chain
annotation, which would only allow a member function to return this and
would
implicitly downcast it to the subtype that was passed in as the this
pointer?
For example, assume we attached @chain to Foo.val():
pragma(msg, typeof(bar.val(someValue))); // Bar, not Foo.
This looks like a job for the template this parameter:
T val(this T)(int newVal) {
_val = newVal;
return cast(T) this;
}
Funny enough, if you put Bar into Foo (Foo bar = new Bar; ) it doesn't
work no more.
Tomek