On Tuesday, 8 January 2013 at 23:17:46 UTC, Philippe Sigaud wrote:
The 'int,' part is not necessary: names a and b have a type, you can determine int from CommonType!(typeof(a),typeof(b)). One less field for your user.

Here's a working example, although my updated code hasn't been synced yet. Naming isn't used but is small enough you don't really need them.

  struct S {
    struct X {int d, e;}
    X x;

    mixin(multiAccess!(int, "maxX", "@safe pure nothrow",
          "x.d > x.e", true, true, //choice, read/write
          "x.d", true,
          "x.e", false));
  }

  unittest {
    S s;
    s.x.d = 5;
    s.x.e = 10;

    //maxX returns and references ONLY the larger of the two.
    assert(s.maxX == 10);
    s.maxX = 15;
    assert(s.maxX == 15);
    assert(s.x.d == 5 && s.x.e == 15);
  }

In this case, d & e are both strings, and returning a string wouldn't work (with an int). Choice can be replaced with a function (or lambda?).

 I think it's clear to see how these can be used.

Reply via email to