While the storm raged, I decided to try implementing properties as library types. I encountered a few obstacles, which I will outline here.

First, my intended syntax:

  class A {
    int _n;
    Property!(
      () => _n,
      value => _n = value
    ) n;
  }

Property would then be a struct, with operators and functions defined as required, copying disabled, and of course alias this.

Now, the obstacle here is I can't refer to _n in those lambdas. Why not? I'm guessing the struct has no context member, and the lambdas don't because the class is not yet instantiated. Could this be fixed? I think so, and I think this is a feature with benefits beyond simple properties.

This library solution would not be able to do everything a language solution could. Amongst those, typeof(property) would return Property!(..., ...). Just as important, this would not work:

  auto a = foo.property;

, because the struct's postblit is marked @disable. Perhaps alias this should be attempted in such a situation?

--
Simen

Reply via email to