Compile time code generation

Steven Schveighoffer schveiguy at gmail.com
Fri Nov 16 18:26:56 UTC 2018


On 11/16/18 12:10 PM, boolangery wrote:
> Hi,
> 
> Is something like this is doable ?
> 
> -------------------------------------------------------------------
> // all compile time
> MapperGen.Create!(A, B)
>      .Map!("p1", "p2")
>      .Map!("myprop", "otherprop")
>      .Gen();
> 
> // The code above must generate something like
> //
> // class Mapper {
> //     B map(A value) {
> //         B ret = new B();
> //         ret.p1 = value.p2;
> //         ret.myprop = p2.otherprop;
> //         return ret;
> //     }
> // }
> 
> // runtime use
> auto b = new Mapper().map(new A());
> -------------------------------------------------------------------
> 
> I can't figure out how to concatenate string at runtime and the mixin 
> the resulting string?.

I'm not understanding what you are trying to do, but to answer your 
question, you can only mixin a string generated at compile time.

However, you can concatenate a string at runtime inside a CTFE-able 
function, and then mixin the result.

Example:

string foo(string[] fields...)
{
    string result = "struct Foo {";
    foreach(f; fields)
        result ~= "int " ~ f ~ ";";
    return result ~ "}";
}

mixin(foo()); // generate the struct

-Steve


More information about the Digitalmars-d-learn mailing list