I am trying to write a function to merge two named structs, but am completely stuck on how to do that and was wondering if anyone good provide any help. I know I can access the different names with tup.fieldNames, but basically can't work out how to use that to build the new return type. Below is an outline of what I am trying to do (with unittest). Any pointers would be greatly appreciated.

/++
Merge two Aes structs

If it has similar named types, then it uses the second one.

Returns a new struct, with combined types.
+/
import std.typecons : Tuple;
template merge(T, U)
{
    auto merge( T base, U other )
    {
        // Go over other.fieldNames and collect them for new tuple
// Go over base.fieldNames, ignoring the ones that other has as well
        // Build newTuple
        return newTuple;
    }
}

///
unittest
{
    auto xs = ["a","b"];
    auto ys = ["c","d"];
    auto labels = ["e","f"];
auto aes = Tuple!(string[], "x", string[], "y", string[], "label")(
            xs, ys, labels );

    auto nlAes = merge( aes, Tuple!(double[], "x",
                double[], "y" )(
                [0,1], [3,4] ) );

    assertEqual( nlAes.x[0], 0 );
    assertEqual( nlAes.label.front, "e" );
}

Reply via email to