On Wednesday, 17 June 2020 at 16:01:29 UTC, Paul Backus wrote:
On Tuesday, 16 June 2020 at 13:31:49 UTC, Atila Neves wrote:

<snip>

With a few changes, yes (added missing semicolons, changed IGeometry to Geometry in `measure`, passed the current module so tardy can find the UFCS functions, added `@safe pure` to the UFCS functions:

[...]

void main() {
    auto r = Rect(3.0, 4.0);
    auto c = Circle(5.0);

    Geometry.create!__MODULE__(r).measure;
    Geometry.create!__MODULE__(c).measure;
}

IMO this can be done more elegantly by separating out the code that looks up methods in the current module from the code that does the actual type erasure.

A while ago, I collaborated briefly with Adam Kowalski from the Dlang discord server on some code to emulate C++-style argument-dependent lookup in D. Using that code, your example above would be written:

    Geometry.create(r.extended).measure;
    Geometry.create(c.extended).measure;


Interesting.

The issue I see here is you might not be able to control which module has the extension methods. I guess you could alias them in the module you want to use but that seems clumsy.

In any case, this is trivial:

template extended(string mod = __MODULE__) {
    auto extended(A...)(auto ref A args) {
        return create!mod(args);
    }
}

            • Re: t... jmh530 via Digitalmars-d-announce
            • Re: t... Atila Neves via Digitalmars-d-announce
              • R... jmh530 via Digitalmars-d-announce
              • R... Atila Neves via Digitalmars-d-announce
              • R... jmh530 via Digitalmars-d-announce
              • R... Atila Neves via Digitalmars-d-announce
              • R... jmh530 via Digitalmars-d-announce
              • R... Paul Backus via Digitalmars-d-announce
              • R... jmh530 via Digitalmars-d-announce
              • R... Sebastiaan Koppe via Digitalmars-d-announce
              • R... Atila Neves via Digitalmars-d-announce
  • Re: tardy v0.0.1 - Runtime ... Stanislav Blinov via Digitalmars-d-announce

Reply via email to