On Sunday, 1 October 2017 at 01:05:56 UTC, Nicholas Wilson wrote:
struct MyType
{
    void* raw;
    static struct Info
    {
        @(42) int foo;
    }
    mixin generateGetInfo!MyTypeGetInfo;
}

extern(C) void MyTypeGetInfo(void*,int,size_t,void*size_t*);
mixin template generateGetInfo(alias func)
{
    foreach(field; typeof(this).Info.tupleof)
    {
mixin("@property " ~ typeof(field).stringof ~ " " ~ field.stringof ~ "()" ~
               " { " ~
               "    typeof(return) ret;" ~
func.stringof ~ "(this.tupleof," ~ __traits(getAttributes, field)[0] ~ ",ret.sizeof,&ret,null);" ~
              "return ret; }");
    }
}

Fails with
Error: declaration expected, not 'foreach'
Error: no identifier for declarator typeof(this).Info.tupleof
Error: declaration expected, not ')'

I also tried a double mixin, one for the foreach and one for the mixin to no avail. How do I do a foreach in a [template] mixin to procedurally inject multiple declarations ? Static foreach is not an option as I am using LDC.

Hmm, generating the mixed in code as all one string and then mixing it in should work I think. Rather ugly though.

Reply via email to