On Monday, 5 June 2023 at 15:13:43 UTC, Basile B. wrote:
On Monday, 5 June 2023 at 13:57:20 UTC, Ki Rill wrote:
How do I generate `setX` methods for all private mutable

although I did not spent time on the setter body... I suppose the question was more about the metprogramming technic, and that you don't want a pre-mashed solution ;)

By the way...an other solution is to use [opDispatch](https://dlang.org/spec/operatoroverloading.html#dispatch):

```d
class Color {}

class Rectangle {
    private Color fillColor;
    private Color strokeColor;
    private uint strokeWidth;

    auto opDispatch(string member, T)(auto ref T t)
    {
             static if (member == "setStrokeWidth") {}
        else static if (member == "setStrokeColor") {}
        else static if (member == "setFillColor") {}
        else static assert(0, "cannot set " ~ member);
        return this;
    }
}

void main()
{
    (new Rectangle)
        .setStrokeWidth(0)
        .setStrokeColor(null)
        .setFillColor(null);
}
```

Sure the first solution takes advantage of D features but to generate code that finally looks like C# or Delphi (`Set`, `Get`; `property`, etc.)

On top of that I tend to prefer the later solution because self-introspection based on `__traits` has corner issues, especially when typecons-like structures are used for the members (e.g sumtype, nullable, etc.).

Reply via email to