On Thursday, 16 September 2021 at 20:12:03 UTC, james.p.leblanc wrote:
Is there some obvious, and simple solution to this
conundrum of mine?

I would consider AAs.

```d
struct A {
    int alpha;
    float x = 1.23;
}

struct B {
    int beta;
    float y = 4.4;
    string s = "this is fine.";
}

string joinstruct(A, B)(string name) {
    string s = "struct " ~ name ~ " {";
    alias memA = __traits(allMembers, A);
    alias memB = __traits(allMembers, B);
    alias initA = A.init.tupleof;
    alias initB = B.init.tupleof;
    static foreach (i; 0 .. memA.length) {
        s ~= typeof(__traits(getMember, A, memA[i])).stringof;
        s ~= " ";
        s ~= memA[i];
        s ~= " = ";
        s ~= initA[i].stringof;
        s ~= ";\n";
    }
    static foreach (i; 0 .. memB.length) {
        s ~= typeof(__traits(getMember, B, memB[i])).stringof;
        s ~= " ";
        s ~= memB[i];
        s ~= " = ";
        s ~= initB[i].stringof;
        s ~= ";\n";
    }
    s ~= "}";
    return s;
}

unittest {
    mixin(joinstruct!(A, B)("C"));
    import std.stdio;
    writeln(C());
}
```

Reply via email to