template this and traits getOverloads issue.
Adam D. Ruppe via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Nov 20 07:03:01 PST 2015
On Friday, 20 November 2015 at 14:18:00 UTC, Alex Parrill wrote:
> But you don't need a template for this case; mixin templates
> have access to `this`:
Indeed, this is a good answer too.
The difference between this and the template thing I did is that
yours is virtual so calling it through an interface will work
even on subclasses. However, you must mix it into each sub class.
Mine is a template that only needs to be in the base
class/interface, but also need a `this` of the derived type to
see the derived type. (That's why I ran `this.bug();` in the
constructor of B btw) If you call it on an variable typed as the
interface, it will only show interface members.
IF i = new A();
i.bug(); // would only show interface members with mine
A a = new A();
a.bug(); // will now show A's members too
That's what the template this parameter does: the type of this at
the *usage site* is passed as the parameter.
With your solution, the type of this at the *mixin site* is
available.
I think your solution is generally better for stuff like
serialization where you are passed an interface but need child
members too. The template this param I used is nice for interface
functions that need some kind of covariance; returning a type
based on how it was used.
More information about the Digitalmars-d-learn
mailing list