Using Enums to Generate Scoped List of Names
Andrey Zherikov
andrey.zherikov at gmail.com
Thu Aug 4 23:31:37 UTC 2022
On Thursday, 4 August 2022 at 14:45:26 UTC, Dennis wrote:
> In DMD, the generated getters/setters are `extern(C++)` so LDC
> and GDC can access them from C++. This doesn't work with
> opDispatch.
Will this work? It minimizes string mixins usage an has no
`opDispatch`:
```d
static struct S(E, T)
{
private T flags;
private template Impl(T mask)
{
pure nothrow @nogc @safe final
{
bool Impl(bool v)
{
v ? (flags |= mask) : (flags &= ~mask);
return v;
}
bool Impl() const scope
{
return !!(flags & mask);
}
}
}
static foreach (mem; __traits(allMembers, E))
mixin("alias "~mem~" = Impl!(1 << E."~mem~");");
}
enum F { square,circle=5,triangle=7 }
S!(F, ubyte) s;
assert(s.square = true);
assert(!(s.circle = false));
assert(s.triangle = true);
assert(s.square);
assert(!s.circle);
assert(s.triangle);
```
More information about the Digitalmars-d
mailing list