Daniel Keep wrote:
Off the top of my head, it wouldn't be terribly hard.

What you would need is a global 'ddup' (deep-dup) function. The generic case would look something like:

T ddup(T)(ref T value)
{
    T result;
    foreach( i,f ; value.tupleof )
        result.tupleof[i] = ddup(f);
    return result;
}

You'd then have to use either specialisation or lots of static if's to account for reference types, allocating new memory as necessary.

Can't see any particular reason why you couldn't do it...

  -- Daniel

You want ddup to be polymorphic. Let's say you have a class with no default constructor, or a class that starts listening on a socket with some default local port -- in the first case, you couldn't ddup it without some ugliness; in the second, you could ddup it, but you'd get an exception because the port's already in use.

It would suffice to have an IClonable interface, and to check structs for a ddup property.

Reply via email to