On Wednesday, 25 December 2024 at 16:41:05 UTC, sfp wrote:
On Wednesday, 25 December 2024 at 07:57:04 UTC, monkyyy wrote:
static foreach, traits and mixin

I was looking into this but I think I need some help getting off the ground...

This doesn't compile:
```
enum Test { mixin("A, B, C") }
```

```

import std;
enum string[] domains=["Ball","Box","CsgDiff"];//could be from traits but I think traits when strings will do is bad enum string[] lowerdomains=["ball","box","csgDiff"];//could be ctfe but... eh

mixin("enum DomainType{"~domains.joiner(",").array~"}");//array makes allot of range code simpler to work with, at costs of speed
string makeunion(){
        string o;
        o~="union{";
        foreach(i;0..domains.length){
         o~=domains[i]~"!Dim ";
                o~=lowerdomains[i]~";";
        }
        o~="}";
        return o;
}
string makeconstructor(int i){
        string o;
        o~="this("~domains[i]~"!Dim "~lowerdomains[i]~"){\n";
        o~="this.type=DomainType."~domains[i]~";\n";
        o~="this."~lowerdomains[i]~"="~lowerdomains[i]~";}";
        return o;
}
unittest{
        //makeconstructor(1).writeln;
}
struct Ball(int i){}
struct Box(int i){}
struct CsgDiff(int i){}
struct Domain(int Dim){
        DomainType type;
        mixin(makeunion);
        static foreach(i;0..domains.length){
                mixin(makeconstructor(i));
        }
        void doSomething(){
                lable:switch(type){
                        static foreach(E;DomainType.min..DomainType.max){
                                case E: E.stringof.writeln; break lable;
                        }
                default:
        }}
}
unittest{
        auto foo=Domain!1(Ball!1());
        foo.doSomething;
}
```

Reply via email to