On Friday, 17 September 2021 at 00:36:42 UTC, ag0aep6g wrote:
On 16.09.21 22:53, jfondren wrote:
string joinstruct(A, B)(string name) {

struct JoinStruct(Structs ...)
{
    static foreach (S; Structs)
    {
        static foreach (i, alias f; S.tupleof)
        {
            mixin("typeof(f) ", __traits(identifier, f),
                " = S.init.tupleof[i];");



Ali, jfondren, ag0aep6g,

All of your responses are greatly appreciated. I have done test implementations of them all, and they work well with my intended application. (Also, I learned
something new from all of them).

The struct mixin template appears to be quite robust and elegant. So, I include a simple implementation for any future readers to take it for a "test drive".

```d

import std.stdio;
import std.traits;

template JoinStruct(Structs ...)
{
   static foreach (S; Structs)
   {
      static foreach(i, alias f; S.tupleof)
      {
mixin("typeof(f) ", __traits(identifier, f), " = S.init.tupleof[i];");
      }
   }
}

void main(){

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

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

   struct C {
      int gamma = 42;
      double z = 1.2e8;
string t = "if this was named 's', duplicate would be detected at compile time";
   }

   struct D {
      mixin JoinStruct!(A,B,C);
   }

   A a;
   B b;
   C c;

   writeln("\na:", a);
   writeln("\nb:", b);
   writeln("\nc:", c)
   auto d = D();
   writeln("\nd:", d);
}

```

My next steps would be to include some UDA's to ease the getopt building for command line arguments. There is a sketch from Jesse Phillips at

https://dev.to/jessekphillips/argument-parsing-into-structure-4p4n

For example:

```d
// Specify The Parameter Structure
struct Options
{
   @Option("threads", "t")
   @Help("Number of threads to use.")
   size_t threads;

   @Option("file")
   @Help("Input files")
   string[] files;
}
```

Again, thanks to you and many of the D community with helping to learn and
appreciate the capabilities of D.  It is nice to be here.

Best Regards,
James



Reply via email to