Compile time mapping

Patrick Schluter Patrick.Schluter at bbox.fr
Sun May 12 16:32:35 UTC 2019


On Saturday, 11 May 2019 at 15:48:44 UTC, Bogdan wrote:
> What would be the most straight-forward way of mapping the 
> members of an enum to the members of another enum (one-to-one 
> mapping) at compile time?

An example of a Initial enum that creates a derived enum using 
the same element names but applying a transformation via a 
function foo() pus adding some other enum elements in the Derived 
one not present in the Initial.
It's a little bit clumsy but works very well.
I use this at module level. This allows to have the Derived enum 
at compile time so that it can be used to declare variables or 
functions at compile time.



mixin({
   string code = "enum Derived : ulong { "~
                         "init = 0,";      /* We set the dummy 
init value to 0 */
   static foreach(i; __traits(allMembers, Initial)) {
     code ~= i~"= foo(Initial."~i~"),";
   }
   code ~= "
     ALL    =  Whatever,
     THING  =  42,
   return code ~ "}";
}());




More information about the Digitalmars-d-learn mailing list