On Sunday, 14 July 2019 at 19:26:41 UTC, Sjoerd Nijboer wrote:
The code it must generate for `doSwitch!(foo, bar)()` is
`{
    switch (int)
    {
        foo:
            foo();
            return;
        bar:
            bar();
            return;
    }
}`


I'd probably just do

void doSwitch(items...)(int i) {
   switch(i) {
      static foreach(idx, item; items) {
         case idx:
             item();
             return;
      }
   }
}


That should work pretty simply.

    enum temp = [FunctionNames].join(", ");

    enum switchEnum = "{" ~ temp ~ "};";

Were you trying to do a mixin here? The error you mention below is trying to use this switchEnum thing as a type... and it isn't a type, it is just a string. the mixin() is necessary to compile it into code and thus create that type.

mixin("enum switchEnum = { " ~ temp ~ "}");

but I think even attempting this is overcomplicating.

        static foreach (name; FunctionNames)
        {
            name ~ " : " ~ name ~ "(); break;";
        }

ditto down here too.

Reply via email to