Re: Compile time code generation

2018-11-16 Thread Steven Schveighoffer via Digitalmars-d-learn

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


Compile time code generation

2018-11-16 Thread boolangery via Digitalmars-d-learn

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?.



Thanks in advance !