On Friday, 8 November 2013 at 02:48:31 UTC, Chris Cain wrote:
Minor tweaks might be necessary, but that should get you started.

Actually, I refactored it a little bit to make it better (original code was just a bit too messy for my taste):

---
struct Vector(int N, T) if (N <= 3) {
  private T[N] data;

  private static size_t toOffset(string fieldName) {
    return cast(size_t)(fieldName[0] - 'x');
  }

  public @property
  auto opDispatch(string fieldName, Args ...)(Args args)
  if (Args.length < 2
      && fieldName.length == 1
      && toOffset(fieldName) < N) {
    static immutable offset = toOffset(fieldName);
    static if(Args.length == 0) {
      // getter
      return data[offset];
    } else {
      // setter
      data[offset] = args[0];
    }
  }
}
---

Reply via email to